Sto sviluppando un'applicazione in cui è necessario eseguire alcune operazioni di post-elaborazione quando l'utente preme CMD + SINISTRA su una particolare casella di testo. Devo fare questo dopo, la funzionalità predefinita del browser (vale a dire dopo aver portato il cursore in primo piano nella linea fisica corrente).Quando si tiene premuto il tasto CMD, la chiave non viene attivata per nessun altro tasto
Il problema è keyup
è non essere attivato per il tasto sinistro (o qualsiasi tasto per questo) fino a quando la chiave CMD è giù.
Ho provato questo con i tasti CTRL e MAIUSC e ho rilevato che il keyup viene attivato come previsto per la chiave secondaria. Quindi, se fai CTRL + SINISTRA e poi rilascerai LEFT e poi rilascerai CTRL, otterrai quattro eventi in totale, 2 keydown e 2 keyup. Per la chiave CMD, tuttavia, otteniamo 2 keydown, ma solo un evento keyup (quello per la chiave CMD stesso quando lo rilasciamo alla fine).
Ho provato questo con il tasto MAIUSC e ho rilevato che la chiave viene attivata come previsto per la chiave secondaria. Quindi, se si fa MAIUSC + SINISTRA e poi si rilascia SINISTRA e poi si rilascia SHIFT, si ottengono 4 eventi in totale, 2 keydown e 2 keyup. Per la chiave CMD, tuttavia, otteniamo 2 keydown, ma solo un evento keyup (quello per la chiave CMD stesso quando lo rilasciamo alla fine).
Cosa potrebbe essere? C'è un modo per ottenere keyup
attivato per il tasto SINISTRA (o qualsiasi tasto) quando CMD non funziona?
Sto provando questo con l'ultimo Google Chrome su OSX 10.9.5. Il comportamento è esattamente lo stesso anche su Firefox. Quindi questo non è un problema di Chrome.
Demo: http://jsfiddle.net/techfoobar/xu0o11nh/4/
In sostanza:
$('#mytextbox')
// this gets correctly triggered for the meta key as well as the secondary key
// when you press CMD and LEFT in sequence, you get two lines in the console one for
// the CMD key and one for the LEFT key
.keydown(function(_e) {
console.log('Keydown: ' + _e.keyCode);
})
// however, if I release the LEFT key (while keeping the CMD key down)
// this does NOT get triggered for the LEFT key
.keyup(function(_e) {
console.log('Keyup: ' + _e.keyCode);
});
in Chrome ricevo tutti gli eventi. jQuery invia una chiave nell'evento che si chiama 'ctrlKey' dove puoi controllare se ctrl è premuto ... io dodnt controllo quale è cmd ma puoi facilmente trovarlo da console completo evento – Mephiztopheles
@Mephiztopheles - Il problema è solo con la chiave CMD ('event.metaKey' courtesy jQuery). – techfoobar
O non ho capito il tuo problema o non ho potuto simularlo. Ecco la mia console: '70 (indice): 34 Keydown: 17 (indice): 34 Keydown: 37 (indice): 37 Keyup: 37 (indice): 37 Keyup: 17' –