chrome setSelectionRange() ne fonctionne pas dans oninput gestionnaire
Je suis en train de travailler avec certains d'auto-complétion de code. setSelectionRange()
est utilisé pour sélectionner le texte à été achevé en oninput
gestionnaire d'événement. Il fonctionne au moins dans Firefox 14, mais pas dans Chrome(6, 17).
Simplifié extrait de code montrant le problème est comme ceci:
<input type='text' oninput='select()' />
function select(e){
var s = this.value;
if (s.length)
this.setSelectionRange(s.length-1, s.length);
}
J'ai débogué le code de chrome, et il s'avère que le texte a été sélectionné à la première à droite après le setSelectionRange()
été exécuté, mais la sélection a disparu plus tard.
Si je la lie le gestionnaire onclick
au lieu de oninput
, comme ceci:
<input type='text' onclick='select()' />
puis les deux navigateurs, beau travail.
Quelqu'un peut me donner des indices pour faire le travail de sélection dans Chrome?
- Il aurait été plus besoin de vous appeler
this.focus()
avant l'appel à setSelectionRange(). Voir l'exemple ici developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/...
Vous devez vous connecter pour publier un commentaire.
Il y a quelques problèmes avec votre code, à savoir que les paramètres passés dans la
select()
fonction sont mauvais:this
serawindow
ete
ne sera pas défini. Aussi, à l'aide deselect()
comme un nom de fonction à l'intérieur de laoninput
attributs sont les causes d'un problème, car sélectionnez permettra de résoudre à l'select()
méthode de l'entrée elle-même. Une meilleure approche consiste généralement à définir le gestionnaire d'événements dans le script plutôt que par l'intermédiaire d'un gestionnaire d'événement attribut.Cependant, le problème persiste même après la correction de ces problèmes. Éventuellement le
input
événement se déclenche avant que le navigateur a déplacé le curseur dans google Chrome. Une solution simple serait d'utiliser une minuterie, même si c'est sous-optimal car il y a une possibilité à l'utilisateur sera en mesure à l'entrée d'un autre personnage avant que la minuterie se déclenche.Démo: http://jsfiddle.net/XXx5r/2/
Code:
JS:
HTML: