2016-04-20 7 views
1

Ich habe eine jQuery-Funktion programmiert, um beim Schreiben von Text in das Eingabefeld automatisch einfache und doppelte Anführungszeichen zu entfernen. In Firefox geht alles gut, aber in Chrome, wenn Sie etwas Anfang des Textes hinzufügen möchten, ist es nicht erlaubt. Da sich der Cursor immer am Ende des Eingabewerts befindet. Ich weiß nicht, wie ich es repariere. Hier ist mein Code:Cursorposition abnormal am Ende des Eingabewerts in Chrome

$.fn.removeQuotes = function() 
{ 
    var elem = $(this); 
    elem.bind("focus propertychange change click keyup input paste", function(event) 
    { 
     setTimeout(function() 
     { 
      elem.val(elem.val().replace(/['"]/g, "")); 
     }, 1); 
    }); 
}; 

EDIT: Nach Kommentare, ich dies versucht:

$.fn.removeQuotes = function() 
{ 
    var elem = $(this); 
    elem.bind("focus propertychange change click keyup input paste", function(event) 
    { 
     // store current positions in variables 
     var start = this.selectionStart, 
     end = this.selectionEnd; 
     setTimeout(function() 
     { 
      elem.val(elem.val().replace(/['"]/g, "")); 
     }, 1); 
     // restore from variables... 
     this.setSelectionRange(start, end); 
    }); 
}; 

aber nichts geändert.

+0

Duplizieren: http://stackoverflow.com/questions/14508707/updating-an-inputs-value-without-losing-cursor-position – code4pi

+0

Ich denke, die obige Lösung ist wahrscheinlich richtig. Kannst du bestätigen, dass dies das ist, wovon du sprichst? – Dale

Antwort

1

Hier ist eine grobe Version für Sie bauen - https://jsfiddle.net/Sanjeevi/79gun3g0/1/

<div> 
     <input id="text-box" type="text"> 
    </div> 

$.fn.removeQuotes = function() 
{ 
    var elem = $(this); 
    elem.bind("keyup", function(event) 
    { 
       var start = elem.caret(); 
      console.log(start); 
      elem.val(elem.val().replace(/['"]/g, "")); 
      setCaretPosition('text-box',start); 
    }); 
}; 

function setCaretPosition(elemId, caretPos) { 
    var elem = document.getElementById(elemId); 

    if(elem != null) { 
     if(elem.createTextRange) { 
      var range = elem.createTextRange(); 
      range.move('character', caretPos); 
      range.select(); 
     } 
     else { 
      if(elem.selectionStart) { 
       elem.focus(); 
       elem.setSelectionRange(caretPos, caretPos); 
      } 
      else 
       elem.focus(); 
     } 
    } 
} 

$(document).ready(function(){ 
    $("#text-box").removeQuotes(); 
}); 
Verwandte Themen