2013-06-19 10 views
5

Mentre so che catturare i tasti a causa della e.keyCode vs e.charCode non è banale, ho pensato che jQuery sarebbe stato in grado di normalizzare la maggior parte di quelle incoerenze. Tuttavia, mentre answering this question ho scoperto che il carattere # sembra avere codici chiave molto incoerenti (e naturalmente questo è vero anche per molti altri codici, principalmente a seconda del browser e della tastiera presumo).coerente keyCode per `#`

Chrome e IE ceduta 191, Firefox 163 sul mio computer, un altro utente ha riferito 222. Chromes window.event anche segnalati U+00BF come keyIdentifier - che secondo le tabelle Unicode dovrebbe essere ¿.

Conoscete qualche modo coerente per determinare tali simboli come la # con keycodes incoerenti senza fare qualcosa di brutto come il seguente:

$('input').keydown(function (e) { 
     if (e.which == 191 || e.which == 163 || e.which == 222){ 
      // hope you got the right key 
      e.preventDefault(); 
     } 
}); 

Fiddle for your pleasure.

+1

Uhm ... '#' è una chiave '3' con' shift' modificatore. Non c'è nessuna chiave '#' a tutti – zerkms

+3

@zerkms Immagino che dipenda dal layout della tastiera :-p – Christoph

+0

ancora - è ** chiave ** in basso. Non c'è la chiave '#' – zerkms

risposta

7

Questo funziona per me in Chrome e Firefox con un tastiera USA:

$('[id$=txtClient]').keypress(function (e) { 
    if (String.fromCharCode(e.which) == '#') { 
     e.preventDefault(); 
    } 
}); 

keypress è l'unico evento che vi darà affidabile info sul carattere inserito.

Demo:http://jsfiddle.net/elclanrs/ebcet/9/

+0

Ho letto che KeyPress non è affidabile, ecco perché ho cercato di evitarlo: 'poiché l'evento keypress non è coperto da alcuna specifica ufficiale, il comportamento effettivo riscontrato durante l'utilizzo potrebbe differire tra browser, versioni del browser e piattaforme. »Ma funziona anche per me. Anche che 'String.fromCharCode' è veramente bello! – Christoph

+1

Non sono sicuro se jQuery fa qualcosa di magico per l'evento 'keypress', ma ha sempre funzionato per me in IE8 + e in tutti i browser moderni. – elclanrs

+0

Aspetterò un'altra risposta che forse può raggiungere lo stesso senza pressione di un tasto, altrimenti ovviamente accetterò i tuoi come sono contentissimo dal fromCharCode;). – Christoph

0

Hai provato a usare l'evento keypress?

documentation mette in guardia sulle possibili differenze di comportamento tra le piattaforme.

In Firefox, almeno, e.which corrisponde al codice ASCII del carattere digitato dopo la trasformazione:

$('#txtClient').keypress(function (e) { 
    console.log('keypress:', e.which); 
    if (e.which == 35) { 
     return false; 
    } 
}); 

updated fiddle

+0

10 minuti troppo tardi amico :-p – Christoph

Problemi correlati