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.
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? –
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. –
Si falla allí, ¿cuál es el mensaje de error? ¿Y dónde se establece el foco? –