Rileva il tasto Invio in un campo di immissione testo


299

Sto provando a fare una funzione se si preme enter mentre si è su un input specifico.

Cosa sto sbagliando?

$(document).keyup(function (e) {
    if ($(".input1").is(":focus") && (e.keyCode == 13)) {
        // Do something
    }
});

Esiste un modo migliore per farlo, che direbbe se Invio premuto su .input1funzioni?


Risposte:


499
$(".input1").on('keyup', function (e) {
    if (e.keyCode === 13) {
        // Do something
    }
});


//keyup not compatible with Jquery select(), Keydown is.

In quale browser lo stavi testando? Penso che le versioni precedenti di IE non attivino eventi di keyup sul documento (non ne sono sicuro).
Joseph Silber,

2
Il tuo codice non funzionava perché hai usato .is () e necessitava di === anziché ==. Vedi la mia risposta per ulteriori dettagli.
mercoledì

6
@jQuerybeast Non è necessario , ed event.keyCodeè un Number, quindi JavaScript farà gli stessi passi con ==o ===.
alex,

7
e. che è dichiarato più utile tra i browser
mohammad eslahi sani,

2
Proprietà which, code, charCodee keyCodeè deprecato developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent , si prega di aggiungere informazioni effettive per la tua risposta.
Sasay,

120

event.key === "Invio"

Più recente e molto più pulito: usare event.key. Niente più codici numerici arbitrari!

const node = document.getElementsByClassName(".input")[0];
node.addEventListener("keyup", function(event) {
    if (event.key === "Enter") {
        // Do work
    }
});

Se devi usare jQuery:

$(document).keyup(function(event) {
    if ($(".input1").is(":focus") && event.key == "Enter") {
        // Do work
    }
});

Mozilla Docs

Browser supportati


6
complimenti per la semplice versione javascript, non sono sicuro del motivo per cui tutti gli altri sono in jquery
Captain Fantastic

7
Perché, l'OP ha inserito il suo codice di esempio in jQuery e (oltre a JavaScript) jQuery è taggato.
Tigerrrrr,

44
$(document).keyup(function (e) {
    if ($(".input1:focus") && (e.keyCode === 13)) {
       alert('ya!')
    }
 });

O semplicemente associare l'input stesso

$('.input1').keyup(function (e) {
    if (e.keyCode === 13) {
       alert('ya!')
    }
  });

Per capire quale codice chiave è necessario, utilizzare il sito Web http://keycode.info


Grazie. Ho imparato qualcosa di nuovo. A proposito, ho usato .is () MOLTE volte, quindi non è logico, non funzionare. Anche il ==, ancora una volta ho usato due == per altre situazioni
jQuerybeast il

np, dovresti sempre usare ===
wesbos il

12

Prova questo per rilevare il Entertasto premuto in una casella di testo.

$(function(){

$(".input1").keyup(function (e) {
    if (e.which == 13) {
        // Enter key pressed
    }
 });

});

6

Potrebbe essere troppo tardi per rispondere a questa domanda. Ma il codice seguente impedisce semplicemente la chiave di invio. Basta copiare e incollare dovrebbe funzionare.

        <script type="text/javascript"> 
        function stopRKey(evt) { 
          var evt = (evt) ? evt : ((event) ? event : null); 
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
          if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
        } 

        document.onkeypress = stopRKey; 

        </script>

6

Il modo migliore che ho trovato è usare keydown( keyupnon funziona bene per me).

Nota: ho anche disabilitato l'invio del modulo perché di solito quando ti piace fare alcune azioni quando premi il tasto Invio l'unica cosa che non ti piace è inviare il modulo :)

$('input').keydown( function( event ) {
    if ( event.which === 13 ) {
        // Do something
        // Disable sending the related form
        event.preventDefault();
        return false;
    }
});

event.keyCode è un evento obsoleto che non lo è, quindi è meglio
Alex,

3

La soluzione che funziona per me è la seguente

$("#element").addEventListener("keyup", function(event) {
    if (event.key === "Enter") {
        // do something
    }
});

1

Prova questo per rilevare il tasto Invio premuto in una casella di testo.

$(document).on("keypress", "input", function(e){
    if(e.which == 13){
        alert("Enter key pressed");
    }
});

DEMO


0
 $(document).ready(function () {
        $(".input1").keyup(function (e) {
            if (e.keyCode == 13) {
                // Do something
            }
        });
    });

0

Questo codice ha gestito ogni input per me nell'intero sito. Verifica la chiave INVIO all'interno di un campo INPUT e non si ferma su TEXTAREA o in altri luoghi.

$(document).on("keydown", "input", function(e){
 if(e.which == 13){
  event.preventDefault();
  return false;
 }
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.