2010-11-23 16 views
6

Tengo un cierto problema con IE8 (y solo IE), cuando enfoco un campo de entrada que tiene texto, el cursor se mueve al comienzo de ese campo. Estoy tratando de poner el cursor al final. He buscado en Google y encontré la siguiente solución:El cursor se mueve al comienzo de un campo de texto

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(); 
    } 
} 

"entrada" aquí es simplemente un campo de entrada que se encuentra en una clase (var inputElement = this.input;). El problema es que tanto "setSelectionRange" como "createTextRange". ¿Estoy haciendo algo mal? ¿CreateTextRange está definido solo para TextArea?

@Edit: bueno, parece que estaba usando algo así como "dos objetos" una entrada js y una entrada jquery, después de cambiar la entrada a document.getElementsByTagName ("input") [0]; Puedo ir a la rama "createTextRange" pero todavía no cambia la posición del cursor.

@ Edit2: Cambié el código un poco, ahora recibo la entrada del documento y entra en la rama if. Pero entonces el navegador me muestra:

Unexpected call to method or property access. 

En esta línea var range = input.createTextRange();

@ Edit3: Para responder a la pregunta de James. Tengo una clase y en esa clase, todo está asociado con un jsp que tiene una entrada. En esta clase me puse un controlador de enfoque para el campo que está asociado con la entrada de formar el JSP inputElement.focus(onInputFocus) entonces tengo algo como esto:

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; 
} 

Toda la clase es, obviamente, mucho más grande y esto no es mi código pero Supongo que esto es lo último que se está ejecutando.

+0

Esta función funcionará correctamente para los elementos ''. ¿Estás seguro de que el elemento que estás pasando es un elemento de entrada DOM? –

+0

Sí, lo comprobé dos veces. El problema ahora es con "var range = input.createTextRange();" no sé por qué Entra en esa rama pero falla en esa línea y el resto no se ejecuta. –

+0

Si falla allí, ¿cuál es el mensaje de error? ¿Y dónde se establece el foco? –

Respuesta

4

Lo siento, ¿me falta algo aquí? ¿Estás tratando de establecer el cursor hasta el final o resaltar el rango? Tu pregunta parece implicar lo primero, pero la solución logra lo segundo.

Si solo desea colocar el cursor hasta el final, entonces la función anterior no es necesaria. Basta con hacer lo siguiente una vez que el enfoque se ha establecido:

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

Ver este jsFiddle: http://jsfiddle.net/7vdv6/

EDIT:

Por lo que yo puedo ver que hay un montón de cosas que podrían ser desviando el foco de su entrada:

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

} 

¿Qué sucede si agrega un foco() entre su últimas dos líneas:

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

También tiene una mezcla bastante complicada de jQuery y JavaScript estándar. Por ejemplo, ¿por qué está usando document.getElementsByTagName("input")[0] cuando puede usar $("input:first")?

+0

Sí Simplemente intento poner el cursor al final. Ya probé "input.value = input.value;" pero de alguna manera no funcionó, el cursor todavía va automáticamente al principio. –

+0

¿Cuándo lo llamas? Es decir. ¿Es una de las últimas cosas que estás haciendo? ¿Puedes mostrarnos el código que lo rodea? –

+0

agregó un código más –

Cuestiones relacionadas