2013-02-17 15 views
31

Voglio rilevare quando viene premuto il tasto Invio, su HTML che verrà iniettato dopo il caricamento di js.Uso di jQuery 'on()' per guardare per inserire il tasto premere

Per rilevare semplicemente quando si preme il tasto invio, posso fare:

$('#textfield').keydown(function (e){ 
    if(e.keyCode == 13){ 
     console.log('Enter was pressed'); 
    } 
}) 

Questo codice funziona per(), ma sono preoccupato è inefficiente in quanto jQuery controllerà ogni volta che si preme un tasto . C'è qualcosa di inefficiente in questo?

$('body').on('keydown','#textfield', function(event) { 
    if (event.keyCode == 13) { 
    console.log('Enter was pressed'); 
    } 
} 
+4

No. letteralmente migliaia di cose che succedono quando si preme un tasto, sarà come una goccia nell'oceano. – JJJ

+0

call script su evento pronto – EnterJQ

risposta

45

Se si desidera catturare la pressione di un tasto qualsiasi punto della pagina -

$(document).keypress(function(e) { 
    if(e.which == 13) { 
    // enter pressed 
    } 
}); 

Non preoccuparti per il fatto che questo controllo per ogni pressione di un tasto, in realtà è non mettere alcun carico significativo sul browser.

1

In termini pratici, niente di cui preoccuparsi. Il browser ha già iniziato a gorgogliare quell'evento e, anche se potrebbe essere intrappolato dallo body ed eseguire un selettore dall'evento delegato, questo non è un controllo pratico approfondito o difficile da eseguire per JQuery, specialmente con un ID-only selettore.

+0

Accetto. BTW: Non hai davvero una scelta - non c'è modo di aggiungere un ascoltatore alla chiave (anche se sarebbe bello). –

+0

... e anche se ci fosse un modo per aggiungere un listener a una singola chiave, internamente il browser dovrebbe * ancora * dover reagire a ogni pressione di un tasto per determinare quale tasto è stato premuto. – JJJ

8

si potrebbe ancora utilizzare .on()

$(document).off('keyup#textfield'); 

$(document).on('keyup#textfield', function(event) { 
    if (event.keyCode == 13) { 
     console.log('Enter was pressed'); 
    } 
}); 
+0

sei un risparmiatore di vita :) –