Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I tested the following in Firefox, Safari and Internet Explorer. Unless I didn't fully understand your objective, I believe this should solve your problem.</p> <p>I ended up writing a jQuery plugin to handle the input caret position. The plugin source is included below, or available on the jQuery plugin site (<a href="http://plugins.jquery.com/project/caret-range" rel="nofollow noreferrer">http://plugins.jquery.com/project/caret-range</a>).</p> <pre><code>$(document).ready(function () { var InvalidPattern = /[^a-z0-9\- ]+/gi; var SpacePattern = / /g; var name = $("#name"); var preview = $("#preview"); var callback = function (e) { setTimeout(function () { // Get range and length to restore caret position var range = name.caret(); var len = name.val().length; // Blur element to minimize visibility of caret jumping name.get(0).blur(); // Remove invalid characters, and update preview name.val(name.val().replace(InvalidPattern, "")); preview.text(name.val().replace(SpacePattern, "-")); // Restore caret position var diff = len - name.val().length; name.caret(range.start - diff, range.end - diff); }, 0); }; name.keypress(callback); name.keydown(callback); // Needed by IE to update preview for Delete and Backspace }); /* * jQuery Caret Range plugin * Copyright (c) 2009 Matt Zabriskie * Released under the MIT and GPL licenses. */ (function($) { $.extend($.fn, { caret: function (start, end) { var elem = this[0]; if (elem) { // get caret range if (typeof start == "undefined") { if (elem.selectionStart) { start = elem.selectionStart; end = elem.selectionEnd; } else if (document.selection) { var val = this.val(); var range = document.selection.createRange().duplicate(); range.moveEnd("character", val.length) start = (range.text == "" ? val.length : val.lastIndexOf(range.text)); range = document.selection.createRange().duplicate(); range.moveStart("character", -val.length); end = range.text.length; } } // set caret range else { var val = this.val(); if (typeof start != "number") start = -1; if (typeof end != "number") end = -1; if (start &lt; 0) start = 0; if (end &gt; val.length) end = val.length; if (end &lt; start) end = start; if (start &gt; end) start = end; elem.focus(); if (elem.selectionStart) { elem.selectionStart = start; elem.selectionEnd = end; } else if (document.selection) { var range = elem.createTextRange(); range.collapse(true); range.moveStart("character", start); range.moveEnd("character", end - start); range.select(); } } return {start:start, end:end}; } } }); })(jQuery); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload