Questo è probabilmente il comportamento previsto o almeno non un problema jQuery/js ma mi piacerebbe qualche chiarimento se ce n'è uno da avere.jQuery keypress evento si attiva ripetutamente quando si tiene premuto il tasto - ma non su tutti i tasti
adottare le seguenti:
$(document).bind('keypress', function(e){
switch(e.keyCode)
{
case 37:
console.log('left cursor keydown, will fire on hold');
break;
case 39:
console.log('right cursor keydown, will fire on hold');
break;
case 80:
console.log('p will only fire once per press!');
break;
}
});
Si può anche giocare con l'esempio alla documentazione di jQuery: http://api.jquery.com/keypress/
Quando si preme un cursore a sinistra oa destra (o molti altri tasti, come A,E,[,
, ecc), l'evento si attiva e si ottiene un messaggio di registro nella console. Tutto bene & come previsto. Tuttavia, ora prova a tenere premuto il tasto - dopo una breve pausa vedrai che l'evento keydown scatta più volte quando tieni premuto il tasto, tuttavia se provi a colpire uno p
(o, ad esempio, un j
), verrà attivato solo una volta.
Sto testando questo utilizzando FF 9.0.1 e mac OSX 10.7.1 e jQuery 1.7.1.
È questo in base alla progettazione, è una funzionalità dipendente dal browser, o è a che fare con il sistema operativo, o anche la tastiera stessa? Qualcuno ha anche una lista di chiavi che si ripeteranno e chiavi che non lo faranno?
Per quanto riguarda il caso d'uso, non ce n'è uno in realtà - questo è appena spuntato quando legavo un'animazione a una pressione del cursore e ho iniziato a vedere un comportamento strano quando il tasto è stato premuto. Per risolvere il problema, utilizzare invece l'evento keyup()
e preventDefault()
sull'evento keydown()
per le chiavi in cui ero insterestato, per impedire lo scorrimento dei cursori sullo schermo.
UPDATE: Sembra che l'evento keypress, keyCode è sempre 0
per la maggior parte delle lettere, che potrebbe avere qualcosa a che fare con il motivo per cui ho pensato che il gestore unico licenziato una volta. Dopo alcuni test, vedo le voci del registro ripetute come per i cursori. Se si seleziona la pagina di API jQuery, però, e utilizzare la demo su quella, esibisce il comportamento che descrivevo: http://api.jquery.com/keypress/
Ancora non riesco a spiegare che io stesso:/
Tutti i tasti si ripetono. Devi aggiungere 'break' alla fine di ogni caso switch, a meno che non li lasci intenzionalmente. La tua tastiera non funziona correttamente, o il tuo codice ha semplicemente bisogno di alcuni 'break'. –
Non per me - "p" si ripete bene. Penso che sia una funzione dell'hardware/firmware della tua tastiera. – Pointy
@BrianGraham ha appena notato che, grazie :) dopo aver provato di nuovo su jsfiddle, sto vedendo una ripetizione anche su tutti i tasti - tuttavia il keyCode attr è 0 sulla maggior parte delle chiavi per l'evento keypress, che spiegherebbe alcuni dei comportamenti strani Stavo vedendo lo – jammypeach