2012-07-02 13 views
5

Cuando intento hacer .focus() Espero establecer el foco en el elemento de entrada y ver el cursor después del último carácter del valor. Y lo veo en IE.jQuery .focus() funciona de manera diferente en cada navegador. ¿Cómo prevenir eso?

En Safari/Chrome, la entrada se enfoca y se selecciona todo el texto. En la entrada de Firefox/Opera obtiene el foco, pero el cursor está al principio.

¿Qué podría hacer para evitarlo y obtener un comportamiento correcto para todos los navegadores?

Un ejemplo es aquí: http://jsbin.com/ozojol/edit#javascript,html

PS. El método focus().val('').val(value) no funciona en IE ... ¿Qué otras soluciones existen?

+0

¿Qué versión de Firefox, y en qué sistema operativo? Firefox 13.0.1 en Windows 7 coloca el cursor después del valor. –

+0

OSX, FireFox 13.0 :) Voy a intentar 13.0.1 más tarde, pero funciona de manera diferente en otros navegadores :) Y estoy tratando de encontrar una solución para evitar eso. – ValeriiVasin

+0

Ver http://stackoverflow.com/a/4716021/96100 –

Respuesta

7

Puede utilizar selectionStart y selectionEnd las propiedades de la entrada en la mayoría de los navegadores y algunos desagradable TextRange cosas en IE < 9. Aquí hay un código adaptado de an answer to a similar question.

Demostración: http://jsbin.com/azapuy

Código:

function moveCaretToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

var input = $('#i')[0]; 
input.focus(); 
moveCaretToEnd(input); 
+1

Puedo confirmar que funciona en todos los principales navegadores. – rcdmk

+0

¡Genial! ¡Gracias! – ValeriiVasin

+0

Funciona en FF 16 - ¡agradable! Debe tener cuidado de llamar a moveCaretToEnd con el elemento dom real (como se muestra arriba), no el objeto jQuery. Este último no funciona. – sieppl

1

Hay un gran complemento liviano para mover el cursor hacia el final del contenido dentro de su elemento. jQuery Caret

Live Demo

+0

Esto no funciona en Firefox 3.6. Funciona en: IE7, IE8, IE9, Chrome 19 y Safari 4. Se mueve a la primera posición en: Opera 11. – rcdmk

+0

@rcdmk He actualizado mi respuesta. ** [jQuery Caret] (https://github.com/DrPheltRight/jquery-caret) ** abordará el problema. – Farahmand

+0

jQuery Caret no funciona en IE8. tal vez otros, no lo han intentado. – ValeriiVasin

0

El único comportamiento común es la select(), que selecciona el texto de entrada en todos los principales navegadores (no se puede confirmar si funciona en todos los navegadores).

Cuestiones relacionadas