Da ich diese Lösung wirklich brauchte und die typische Basislösung ( Eingabe fokussieren - dann Wert auf sich selbst setzen ) nicht browserübergreifend funktioniert , habe ich einige Zeit damit verbracht, alles zu optimieren und zu bearbeiten, damit es funktioniert. Aufbauend auf dem Code von @ kd7 habe ich mir Folgendes ausgedacht .
Genießen! Funktioniert in IE6 +, Firefox, Chrome, Safari, Opera
Browserübergreifende Caret-Positionierungstechnik (Beispiel: Bewegen des Cursors auf ENDE)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
Das Fleisch und die Kartoffeln sind im Grunde genommen die SetCaretPosition von @ kd7 , wobei die größte Verbesserung darin besteht if (el.selectionStart || el.selectionStart === 0)
, dass in Firefox der SelectionStart bei 0 beginnt , was in Boolean natürlich zu False wird, also brach er dort.
In Chrome war das größte Problem, dass es .focus()
nicht genug war, es nur zu geben (es wurde immer der gesamte Text ausgewählt!). Daher setzen wir den Wert von sich selbst auf sich selbst, el.value = el.value;
bevor wir unsere Funktion aufrufen, und jetzt hat es einen Griff und eine Position mit dem Eingabe zur Verwendung von selectionStart .
function setCaretPosition(elemId, caretPos) {
var el = document.getElementById(elemId);
el.value = el.value;
// ^ this is used to not only get "focus", but
// to make sure we don't have it everything -selected-
// (it causes an issue in chrome, and having it doesn't hurt any other browser)
if (el !== null) {
if (el.createTextRange) {
var range = el.createTextRange();
range.move('character', caretPos);
range.select();
return true;
}
else {
// (el.selectionStart === 0 added for Firefox bug)
if (el.selectionStart || el.selectionStart === 0) {
el.focus();
el.setSelectionRange(caretPos, caretPos);
return true;
}
else { // fail city, fortunately this never happens (as far as I've tested) :)
el.focus();
return false;
}
}
}
}
if(elem.selectionStart)
bricht ab, wenn selectionStart 0 ist, wie auch in der Antwort von jhnns hervorgehoben.