2009-12-13 15 views
13

ok, ho bisogno del mio codice per controllare se minus/sottrarre/- è stato premuto, se è stato premuto voglio una casella di avviso per pop. ho provato con entrambi i codici 109 e 189 ma non ottengo ancora il risultato desiderato. anche se premo "-" non ho ricevuto quella scatola avvisojavascript sottrarre (-) keycode

risposta

26

JavaScript charCodes, che si prova per durante un evento di pressione di un tasto, sono ASCII. 109 è il codice corretto keyCode, se utilizzato in un evento keydown o keyup.

"-" ha un charCode di 45.

+1

grazie, dove posso trovare un elenco completo dei codici chiave javascript? ho trovato uno o due ma li ho trovato "-" come 109 e 189 – kmunky

+2

http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx – Matt

+0

ok, ho trovato una buona: P http://forums.devarticles.com/javascript-development-22/very-helpful-key-codes-list-72985.html – kmunky

5

postale po 'di codice. Questo funziona per me:

document.onkeydown = function (e) { 
    if (e.keyCode === 109 || e.keyCode === 189) { 
     alert('minus sign pressed'); 
    } 
}; 

elenco completo dei codici chiave qui: http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx

+0

Non farlo nell'evento 'keydown'. Vedi la mia risposta. –

+1

189 non è il segno meno per tutti i layout di tastiera. –

+0

Nella pagina di esempio il layout della tastiera è in inglese. Non è il caso ovunque. – kernel

3

spero questo funziona per te, rileva gli utenti pre le chiavi ssed e se è quella che stai cercando, visualizza l'avviso, puoi cambiare la chiave effettiva in qualsiasi altra chiave.

function detectSubstract(e) 
{ 
var evtobj=window.event? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit. 
var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode 
var actualkey=String.fromCharCode(unicode) 

    if (actualkey=="-") 
    { 
     alert('You pressed the minus key') 
    } 
} 
document.onkeypress=detectSubstract 
6

non fare questo in un gestore di eventi keydown - ti metti in balia delle idee diverse browser sui codici chiave e potenziale variazione tra i codici chiave per i diversi tipi di tastiera. Fatelo in un evento keypress e poi potete ottenere il codice del personaggio, che è quello che volete veramente.

document.onkeypress = function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.which || evt.keyCode; 
    var charStr = String.fromCharCode(charCode); 
    if (charStr == "-") { 
     alert("Minus!"); 
    } 
}; 

Tutte le informazioni che si potrebbe mai bisogno di circa JavaScript eventi chiave: http://unixpapa.com/js/key.html

+0

In realtà 'keydown' è una risposta migliore di' keypress'. Se si guarda l'elenco di compatibilità (http://www.quirksmode.org/js/keys.html) 'keypress' non funzionava con alcune vecchie versioni di Firefox – Mottie

+0

@fudgey: penso che si stiano interpretando erroneamente queste tabelle di compatibilità . Le proprietà 'charCode' e' which' dell'evento 'keypress' hanno felicemente riportato i codici dei caratteri in modo corretto in Firefox da quando ho provato per la prima volta, cosa che penso fosse pre-1.0. Quello che potresti trarre da queste tabelle è che Firefox riporta sempre 0 per la proprietà 'keyCode' degli eventi' keypress', che in realtà non è un problema qui. –

+0

@TimDown Grazie. Chrome ha funzionato con onkeydown e i codici chiave 109 e 189, ma Firefox no. Dopo il passaggio alla onkeypress e al metodo che hai descritto, il rilevamento '-' funziona bene ovunque. –

5

1.event.keyCode = 109 è '-' sul tastierino numerico

2.event.keyCode = 189 è -' in alphabate chiave keybord su Chrome

3.event.keyCode = 173 è '-' in alphabate chiave keybord su Firefox & su Chrome 173 Keycord è muto on | off

+0

Apprezzo la tua opinione su come Firefox gestisce 'keyCode 189'. Sembra sciocco per me che non ci siano degli standard per cose come questa. 'keyCode 189' è un' 'su ogni browser che collaudo tranne Firefox. Mi ricorda di come IE ami essere un pioniere del browser, indipendentemente dai problemi di incompatibilità che derivano dal loro selvaggio lancio del machete. Grazie ancora per il vostro aiuto. – Landslyde