2012-06-12 11 views
31

Estoy tratando de obtener la tecla Enter para activar una función cuando se presiona cuando está dentro de un cierto cuadro de texto, y no desencadenar la primera o el botón predeterminadoCómo obtener la tecla Intro dentro de un cuadro de texto para activar una función y no el botón primero/predeterminado

Se puede ver un ejemplo de lo que está sucediendo aquí: http://jsfiddle.net/cutsomeat/WZ6TM/1/

Si pulsa otra tecla aparecerá un cuadro de alerta con el código clave, sin embargo, si se pulsa la tecla Intro que la clave no obtendrá el cuadro de alerta con el código clave, pero más bien el cuadro de alerta dentro del evento de clic de botón.

Obviamente, la tecla Entrar activa el botón. ¿Hay alguna manera de evitar esto y, en su lugar, capturar la tecla Enter en el evento keyup y luego activar otra función?

Respuesta

66

Prueba esto:

$('#myText').live("keypress", function(e) { 
     if (e.keyCode == 13) { 
      alert("Enter pressed"); 
      return false; // prevent the button click from happening 
     } 
}); 

Demo

+38

'.live()' está privado ahora. Use '.on()' en su lugar. –

+2

es mejor usar 'bind()' en lugar de 'on()' o peor 'live()' – giammin

+0

Use 'on()'. 'bind()' ahora está depreciado. – Gavin

10
$(document).ready(function() { 

    $('#myText').keypress(function(e) { 
     if (e.keyCode == 13) { // detect the enter key 
      $('#myButton').click(); // fire a sample click, you can do anything 
     } 
    }); 

    $('#myButton').click(function(e) { 
     alert('Button click activated!'); 
    }); 

}); 

DEMO

Para elementos vivos utilizan .on(), como a continuación:

$(document).ready(function() { 

    $(document).on('keypress', '#myText', function(e) { 

     if (e.keyCode == 13) { // detect the enter key 
      $('#myButton').click(); // fire a sample click, you can do anything 
     } 
    }); 

    $(document).on('click', '#myButton', function(e) { 
     alert('Button click activated!'); 
    }); 

}); 
+0

Me hubiera gustado hacer +1 pero debería explicar por qué keyup es mejor que keydown/keypress – Schollii

16

Haz e.preventDefault() en keyDown para evitar la acción predeterminada del botón:

$('#myText').keydown(function(e) { 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
    } 
    alert(e.keyCode); 
}); 
+2

Simplemente cambie if (e.keyCode = 13) a if (e.keyCode == 13) –

47

Uso .on() como .live() ha sido deprecated.

$(document).on("keypress", ".myText", function(e) { 
    if (e.which == 13) { 
     //do some stuff 
    } 
}); 
Cuestiones relacionadas