Étant donné que j'avais vraiment besoin de cette solution et que la solution de base typique ( concentrer l'entrée - puis définir la valeur égale à elle-même ) ne fonctionne pas entre les navigateurs , j'ai passé du temps à tout peaufiner et à modifier pour que cela fonctionne. En s'appuyant sur le code de @ kd7 , voici ce que j'ai trouvé.
Prendre plaisir! Fonctionne dans IE6 +, Firefox, Chrome, Safari, Opera
Technique de positionnement du curseur cross-browser (exemple: déplacement du curseur vers END)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
La viande et les pommes de terre est fondamentalement setCaretPosition de @ kd7 , le plus gros ajustement étant if (el.selectionStart || el.selectionStart === 0)
, dans Firefox, selectionStart commence à 0 , ce qui en booléen devient bien sûr False, donc ça cassait là.
Dans Chrome, le plus gros problème était que le donner .focus()
ne suffisait pas (il continuait à sélectionner TOUT le texte!) Par conséquent, nous définissons la valeur de lui-même, à lui-même el.value = el.value;
avant d'appeler notre fonction, et maintenant il a une prise et une position avec le entrée pour utiliser 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)
s'arrête lorsque selectionStart vaut 0 comme l'a également souligné la réponse de jhnns.