Puisque j'avais vraiment besoin de cette solution, et que la solution de base typique ( mettre au point l'entrée - puis mettre la valeur égale à elle-même ) ne fonctionne pas sur tous les navigateurs J'ai passé du temps à tout modifier et à éditer pour que ça marche. En s'appuyant sur @ kd7 Voici ce que j'ai trouvé.
Profitez-en ! Fonctionne dans IE6+, Firefox, Chrome, Safari, Opera
Technique de positionnement du curseur sur plusieurs navigateurs (exemple : déplacement du curseur vers la FIN)
// ** 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 sont essentiellement @ kd7 setCaretPosition, la modification la plus importante étant la suivante if (el.selectionStart || el.selectionStart === 0)
dans firefox, le début de la sélection commence à 0 qui, dans le langage booléen, se transforme bien sûr en Faux, et c'est là que le problème se pose.
Dans le chrome, le plus gros problème était que le simple fait de le donner .focus()
n'était pas suffisant (il sélectionnait tout le texte !) Nous avons donc défini la valeur de lui-même, à lui-même el.value = el.value;
avant d'appeler notre fonction, et maintenant il a une prise & position avec l'entrée à utiliser sélectionDébut .
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;
}
}
}
}