Estoy trabajando con HTML básico <input type="text"/>
campo de texto con un valor numérico.
Voy a agregar eventos de JavaScript keyup
a ver cuando el usuario presiona flecha arriba tecla (e.which == 38
) – luego me incrementar el valor numérico.
El código funciona bien, pero hay una cosa que me molesta. Ambos Safari/Mac y Firefox/Mac mover el cursor al principio cuando me estoy presionando la tecla de flecha arriba. Este es un comportamiento por defecto para cada <input type="text"/>
campo de texto como lo que yo sé y tiene sentido.
Pero esto no crea un efecto estético muy de cursor saltando atrás y adelante (después de valor fue alterado).
El salto al principio sucede en keydown
pero incluso con este conocimiento no soy capaz de evitar que se produzca. He intentado lo siguiente:
input.addEventListener('keydown', function(e) {
e.preventDefault();
}, false);
Poner e.preventDefault()
en keyup
evento no ayuda tampoco.
Es hay alguna manera para evitar que el cursor se mueva?
Para preservar la posición del cursor, de copia de seguridad
input.selectionStart
antes de cambiar el valor.El problema es que WebKit reacciona a
keydown
y la Ópera prefierekeypress
, así que no hay parche: ambos son manejados y estrangulado.He encontrado que la mejor solución es sólo para
return false;
para prevenir el valor predeterminado de la tecla de flecha comportamiento:preventDefault()
le permitirá a la caja de entrada de ignorar el evento, mientras que todavía permite a los demás oyentes de manejarlo como burbujas.e.preventDefault();
en lugar de devolverfalse
. El último no lo lograr la congelación de la tecla de flecha hacia arriba comportamiento. Gracias por la publicación de una alternativa de solución, más simple.De hecho, hay un mejor y más sencillo método para hacer este trabajo.
Sí, es así de fácil!
He probado el código y parece que se cancela el evento, pero si no pulsa la flecha de tiempo muy corto – dispara un evento de pulsación de tecla y que el evento realmente mueve el cursor. Sólo uso preventDefault() también en el evento keypress de controlador y que debería estar bien.
e.preventDefault()
enkeypress
evento me impide entrar nada allí (yo quiero entradas a la obra como en Firebug). Y no soluciona mi problema, al menos en mi navegador – cursor todavía saltos en el principio.Probablemente no. En su lugar usted debe buscar una solución para mover el cursor hasta el final del campo donde estaba. El efecto sería el mismo para el usuario, ya que es demasiado rápido para ser percibido por un ser humano.
Busqué en google alguna y encontré este pedazo de código. Yo no puedo probar ahora y se dice que no funcionan en IE 6.
cuadro de texto.setSelectionRange(cuadro de texto.valor.la longitud, el cuadro de texto.valor.longitud);