2012-03-12 10 views
10
$(window).keydown(function(event){ 
    if(event.keyCode == 13) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

Lo anterior es el código que tengo, que mata efectivamente la tecla "enter" como una forma remitente en todo el sistema, que es exactamente lo Yo quiero. Sin embargo, la tecla Intro también está deshabilitada en las etiquetas de texto, que los usuarios deberían poder presionar ingresar para ir a las siguientes filas. Entonces, hay una manera de modificar el código anterior para detectar SI la entrada proviene de una etiqueta textarea, no ejecuta el evento.preventDefault(); ¿línea?Prevención "Enter" de la presentación del modelo, pero permitir que en los campos de área de texto (jQuery)

Tengo tantas formas en todo el sitio; tener que configurarlas individualmente sería una pesadilla, y probablemente no tenga sentido, tiene que haber una manera universal. El código anterior se ejecuta en cada página del sitio para evitar envíos accidentales al presionar "enter". enter code here

Respuesta

10

yo preferiría el evento keyup ... utilizar la propiedad event.target

$(window).keydown(function(event){ 
    if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

demo

+0

no bastante trabajo - oprimir la tecla Enter en los campos de entrada regulares envía el formulario, el cual no es lo que quiero – jeffkee

+1

es 'textarea' definido? – rjz

+0

@jeffkee actualizó la respuesta con una demostración y también corrigió el código – Rafay

0

¿Por qué no bloquear el evento de la forma submit activen en su lugar?

$('form').submit(function(event){ 
    event.preventDefault(); 
}); 
+0

Debido a que hay formularios que se envían mediante el botón de entrada, escriba submit, por lo que no puedo suprimir eso. no todas las presentaciones están orientadas a JavaScript (aunque la mayoría se deben a la validación de formularios). – jeffkee

3

@ 3nigma 's solución funcionaría igual de bien, pero aquí otra forma de lograr este comportamiento:

$(function(){ 
    $('#myform').find('input,select').keydown(function(event){ 
     if (event.keyCode == 13){ 
      event.preventDefault(); 
     } 
    }); 
}); 
1

Esto parece una buena oportunidad para utilizar el objeto de evento y un bisturí como enfoque en este mosquito en lugar de un enfoque similar a un cañón.

En otras palabras, algo como esto:

... 
// Only watch for a bad type of submission when a submission is requested. 
$('form .contact-form').submit(function(e){ 
    // If a submit is requested, and it's done via keyboard enter, stop it. 
    if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code 
     e.preventDefault(); // Prevent the submit. 
    } 
    // All other mouse actions just go through. 
}); 

La ventaja en este caso debería ser relativamente obvia, si se golpea entrar en cualquier lugar que no presente un formulario, este código no sabe, no lo hace cuidado, no causa problemas.

7

Usted puede probar este

$(document).ready(function(){ 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA') 
     { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

un violín es here.

+1

Esto funciona bien, ya que no se ajusta solo al primer textarea. Cubre todas las áreas de texto en la página. Montones de gracias. –

1

He encontrado que esto funciona mejor. Especialmente si quiere usar el comportamiento de introducir teclas en otros elementos solo para no enviar el formulario de regreso. Solo estoy expandiendo la respuesta de 3nigma.

$("form").keypress(function (event) { 
      if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) { 
       return false; 
      } 
     }); 
2
$('#form_editar').keypress(function(e) { 
    var allowEnter = {"textarea": true, "div": true}; 
    var nodeName = e.target.nodeName.toLowerCase(); 

    if (e.keyCode == 13 && allowEnter[nodeName] !== true) { 
     e.preventDefault(); 
    } 
}); 

edito de Alfa @The un poco, yo uso div para editores WYSIWYG): ...

Cuestiones relacionadas