2011-01-20 36 views
31

Estoy tratando de evitar que la clave ingrese se coloque en un área de texto, pero parece que no funciona.jQuery: Impedir la tecla enter

$('#comment').keyup(function(event) { 
    if (event.text.charCodeAt() == '10') { 
    event.preventDefault(); 
    } 
}); 
+0

No creo que el evento se desencadene, ¿cómo puedo saber si '$ ('# comment')' es lo que quiero? –

+1

Rememebr para enganchar en el evento de cambio, así como la tecla arriba/abajo/presionar que todos los demás han mostrado. con cada solución aquí, las personas aún pueden pegar saltos de línea en el área de texto, para evitar que tenga que eliminarlos;) –

Respuesta

65

me han escrito pequeña demostración en jsfiddle.net, donde se puede probar el código

Todo el mundo tiene una respuesta correcta :)

$('#comment').keypress(function(event){ 

    if (event.keyCode === 10 || event.keyCode === 13) 
     event.preventDefault(); 

    }); 
+2

@Bubby LOL aceptó la respuesta para copiar y pegar el código de otra persona en jsfiddle? –

+9

Solo como una nota; keyCode 10 es necesario porque Safari en iPhones envía keycode 10 cuando se presiona enter – Ben

+0

@Ben Cuando lo probé, envía 13 en lugar de 10. ¿Hay algún documento al respecto? No puedo encontrar uno –

1

intento con .keypress y utilizar return false;

¡Buena suerte!

5

Uso event.keyCode en el caso keydown:

$('#comment').keydown(function(event) { 
    if(event.keyCode == 13) return false; 
    //carry on... 
}); 
+0

¿Por qué no el evento de selección? –

+0

@ Šime Vidas Supongo que podría usar el evento 'keydown'. –

3
$('#comment').keypress(function(event) { 
    if (event.keyCode == 13) { 
     event.preventDefault(); 
    } 
}); 
+0

¿Qué? El código clave para la tecla Intro es '13', no' 10'. –

+2

10 es LF (avance de línea) y 13 es CR (retorno de carro). Él debería evitar ambos. –

+1

@TomislavMarkovski: No. El código de clave es ** siempre ** 13. Véase p. http://unixpapa.com/js/key.html – ThiefMaster

1

Si bien las respuestas proporcionadas aquí se evitar que alguien escribiendo un retorno de carro, no va a evitar que alguien pegando uno de cada.

Usted tendría que hacer algo de post-procesamiento del texto (en javascript o del lado del servidor) para eliminarlos.

http://jsfiddle.net/we8Gm/

Pero la pregunta es, ¿por qué? ¿Por qué no usar simplemente <input type="text"></input> que se ocupa de esto automáticamente ya que es un elemento de entrada de una sola línea?

+0

Porque necesito que la caja sea alta, no ancha. Solo hay 50 px de ancho. –

+0

Ahora tengo curiosidad por para qué utilizarías una entrada alta y delgada. –

+0

widget de chat Ajax que diseñé, por lo que un usuario puede presionar enter para enviar el mensaje. –

11

No puede cancelar un evento keyup. Sin embargo, puede cancelar los eventos keydown y keypress. En la documentación, observe que en "Información del Evento", "Cancela" es "No" para keyup:

Usando keydown le permite cancelar el momento más teclas que keypress, pero si no desea cancelar hasta que se haya levantado la llave, keypress es lo que desea. Afortunadamente para usted, la tecla Intro es una de las claves cancelables para el evento keypress.

Cuestiones relacionadas