j'ai un certain problème avec IE8 (et seulement IE), lorsque je me concentre un champ d'entrée de texte qui a en elle le curseur se déplace au début de ce champ. J'essaye de placer le curseur à la fin. J'ai googlé et trouvé la solution suivante:curseur se déplace vers le début d'un champ de texte
function setSelectionRange(input, selectionStart, selectionEnd) {
input = document.getElementsByTagName("input")[0];
if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
« Entrée » ici est tout simplement un champ d'entrée qui est dans une classe (var inputElement = this.input;
). Le problème est que "setSelectionRange" et "createTextRange". Est-ce que je fais quelque chose de mal? CreateTextRange est-il défini uniquement pour TextArea?
@Edit: Eh bien, il semble que j'utilisais quelque chose comme "deux objets" une entrée js et une entrée jquery, après avoir changé l'entrée de document.getElementsByTagName ("entrée") [0]; Je peux aller à la branche "createTextRange" mais cela ne change pas la position du curseur.
@ Edit2: J'ai changé un peu le code, maintenant je reçois l'entrée du document et il entre dans la branche si. Mais le navigateur me montre:
Unexpected call to method or property access.
Sur cette ligne var range = input.createTextRange();
@ Edit3: Pour répondre à la question de James. J'ai une classe et dans cette classe, le tout est associé à un jsp qui a une entrée. Dans cette classe, je mets un gestionnaire de mise au point pour le champ qui est associé à l'entrée former le jsp inputElement.focus(onInputFocus)
j'ai quelque chose comme ceci:
function onInputFocus() {
isFocused = true;
valueDivElement.hide();
labelElement.html(labelFocus);
if (currentData.selectedEntityCode) {
inputElement.val(currentData.selectedEntityCode);
inputElement.attr('title', currentData.selectedEntityCode);
} else {
}
var input = document.getElementsByTagName("input")[0];
input.value = input.value;
}
La classe entière est évidemment beaucoup plus grande et ce n'est pas mon code, mais je Je devine que c'est la dernière chose qui est en cours d'exécution.
Cette fonction fonctionnera correctement pour les éléments ''. Êtes-vous certain que l'élément que vous transmettez est un élément d'entrée DOM? –
Oui, je l'ai vérifié. Le problème est maintenant avec "var range = input.createTextRange();" Je ne sais pas pourquoi. Il entre dans cette branche mais échoue sur cette ligne et le reste n'est pas exécuté. –
Si cela échoue, quel est le message d'erreur? Et où mettez-vous l'accent? –