2010-11-13 8 views
9

Attualmente sto usando questo codice kepypress Javascript per generare gli eventi su pressione del tasto:Bind Tasti multipli per KeyPress Event

$(document).keydown(function(e) { 
    switch(e.keyCode) { 

    case 39: 
     e.preventDefault(); 
     alert("Arrow Key"); 
     break; 

    case 37: 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 

ma quello che mi chiedo è se posso, invece di legare una legatura chiave di una combinazione di due tasti . Potrei forse fare qualcosa di simile:

$(document).keydown(function(e) { 
    switch(e.keyCode) { 
     case 39 && 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
     break; 
    } 
}); 
+0

vuoi dire loro premendo allo stesso tempo? Quindi puoi consultare http://stackoverflow.com/questions/1652210/can-i-intercept-control-a-keypresses-on-ie. –

risposta

24

Se si desidera controllare più tasti contemporaneamente, è necessario utilizzare solo una chiave normale e uno o più tasti di modifica (alt/maiusc/ctrl) poiché non si è certi che due tasti normali possano essere effettivamente premuti contemporaneamente sul tastiera dell'utente (in realtà, possono essere sempre premuti ma il PC potrebbe non capirlo a causa del modo in cui le tastiere sono cablate).

È possibile utilizzare i campi e.altKey, e.ctrlKey, e.shiftKey per controllare se è stato premuto il tasto modificatore corrispondente.

Esempio:

$(document).keydown(function(e) { 
    if(e.which == 98 && e.ctrlKey) { 
     // ctrl+b pressed 
    } 
}); 
+0

Grazie, apprezzo molto l'aiuto. Sì, questo è in realtà più per quello che stavo cercando. Grazie ancora. – mcbeav

+0

Perfetto, perfetto, perfetto - esattamente quello che stavo cercando stamattina !! – SchweizerSchoggi

3

Perché non usare if piuttosto che switch?

$(document).keydown(function(e) { 
    if ((e.keyCode === 37) || (e.keyCode === 39)) { 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 
+0

Sì, lo farò, non so perché ho preferito usare un interruttore, ma immagino che non abbia importanza. Grazie ancora per l'aiuto. Molto apprezzato. – mcbeav

+0

So che questo non ha nulla a che fare con questo post, ma se vedi questo, forse potresti aiutarmi con il plugin jQuery LazyLoad se hai un minuto? – mcbeav

+0

Solo curiosità, ma come può essere questa la tua risposta accettata mentre affermi "Sto cercando qualcosa che funzioni per una combinazione di tasti premuti. in un altro commento? – ThiefMaster

3

È possibile utilizzare il caso falltrough:

$(document).keydown(function(e) { 
    switch(e.which) { 
     case 39: 
     case 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
      break; 
    } 
}); 

Si noti che sto usando e.which invece di e.keyCode per farlo funzionare in tutti i browser (jQuery assegna automaticamente la proprietà che in realtà contiene il codice della chiave a e.which).

+1

No. Per un evento 'keydown',' keyCode' è la proprietà corretta in tutti i browser. Forse stai pensando agli eventi di 'keypress'? –

+0

Sto per testarlo, ma per essere sicuro, questo sparerà alla pressione di entrambi i tasti, una combinazione, giusto? – mcbeav

+0

no, questo codice non è per 'combination', questo è per' o uno di questi viene premuto'. –