Da ich diese Lösung wirklich brauchte, und die typische Basislösung ( die Eingabe fokussieren - dann den Wert gleich sich selbst setzen ) funktioniert nicht browserübergreifend Ich habe einige Zeit damit verbracht, alles zu optimieren und zu bearbeiten, damit es funktioniert. Aufbauend auf @ kd7 Hier ist, was ich mir ausgedacht habe.
Viel Spaß! Funktioniert in IE6+, Firefox, Chrome, Safari, Opera
Browserübergreifende Cursor-Positionierungstechnik (Beispiel: Bewegen des Cursors zum 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 @ kd7 setCaretPosition, wobei die größte Änderung darin besteht if (el.selectionStart || el.selectionStart === 0)
In Firefox beginnt die Auswahl bei 0 was in boolean natürlich zu False wird, also wurde es dort gebrochen.
Bei Chrom war das größte Problem, dass man es nur .focus()
war nicht genug (er wählte immer den gesamten Text aus!). Daher setzten wir den Wert von selbst auf selbst el.value = el.value;
vor dem Aufruf unserer Funktion, und jetzt hat sie einen Griff & Position mit der Eingabe zu verwenden AuswahlStart .
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;
}
}
}
}