6

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.

+0

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? –

+0

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é. –

+0

Si cela échoue, quel est le message d'erreur? Et où mettez-vous l'accent? –

Répondre

4

Désolé, quelque chose manque ici? Essayez-vous de placer le curseur à la fin, ou mettez en surbrillance la plage? Votre question semble impliquer le premier, mais la solution atteint le dernier.

Si vous voulez juste placer le curseur sur la fin, la fonction ci-dessus n'est pas nécessaire. Il suffit de faire ce qui suit une fois l'accent a été mis:

input.value = input.value; //assumes input is a DOM element. 

Voir cette jsFiddle: http://jsfiddle.net/7vdv6/

EDIT:

Pour autant que je peux voir il y a un tas de choses qui pourraient être détourner l'attention de votre saisie:

isFocused = true; 
valueDivElement.hide(); 
labelElement.html(labelFocus); 
if (currentData.selectedEntityCode) { 
    inputElement.val(currentData.selectedEntityCode); 
    inputElement.attr('title', currentData.selectedEntityCode); 
} else { 

} 

Que se passe-t-il si vous ajoutez un focus() entre vos deux dernières lignes:

var input = document.getElementsByTagName("input")[0]; 
input.focus(); 
input.value = input.value; 

Vous avez également un mélange assez compliqué de jQuery et de JavaScript standard. Par exemple, pourquoi utilisez-vous document.getElementsByTagName("input")[0] lorsque vous pouvez utiliser $("input:first")?

+0

Oui J'essaie simplement de placer le curseur à la fin. J'ai déjà essayé "input.value = input.value;" mais d'une manière ou d'une autre cela n'a pas fonctionné, le curseur continue automatiquement au début. –

+0

Quand appelez-vous? C'est à dire. Est-ce l'une des dernières choses que vous faites? Pouvez-vous nous montrer le code qui l'entoure? –

+0

ajouté un peu plus de code –

Questions connexes