2012-06-12 12 views
31

Sto cercando di ottenere il tasto Invio per attivare una funzione quando viene premuto quando si trova all'interno di una determinata casella di testo e non attivare il primo o pulsante predefinito.Come ottenere il tasto Invio all'interno di una casella di testo per attivare una funzione e non il primo pulsante/predefinito

È possibile vedere un esempio di ciò che sta accadendo qui: http://jsfiddle.net/cutsomeat/WZ6TM/1/

Se si preme altri tasti si otterrà una finestra di avviso con il codice di accesso, ma se si preme il si chiave non otterrà la finestra di avviso con Invio il keycode, ma piuttosto la casella di avviso all'interno dell'evento click del pulsante.

Ovviamente il tasto Invio fa scattare il pulsante. C'è un modo per evitarlo e invece, acquisire il tasto Invio nell'evento keyup, quindi attivare un'altra funzione?

risposta

66

Prova questo:

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

Demo

+38

'.live()' è stato svuotato ora. Usa invece '.on()'. –

+2

meglio usare 'bind()' invece di 'on()' o worst 'live()' – giammin

+0

Usa 'on()'. 'bind()' è ora deprezzato. – 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

Per gli elementi in tensione utilizzare .on() come di seguito:

$(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

Avrei voluto fare +1 su questo, ma dovresti davvero spiegare perché la chiave è meglio di keydown/keypress – Schollii

16

fare e.preventDefault() in keyDown per evitare azione predefinita del tasto:

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

Basta cambiare se (e.keyCode = 13) a if (e.keyCode == 13) –

47

Usa .on() come .live() è stato deprecated.

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