2009-07-31 15 views
16

Ho cercato un buon affare e non riesco a trovare una soluzione soddisfacente. Spero che qualcuno possa aiutarti.Rileva Javascript Chiave di controllo trattenuta sul mouse

Mentre sto usando jQuery, sto anche scrivendo molte migliaia di righe di Javascript. Quindi una soluzione javascript "pura" va bene.

Sto provando a determinare se il tasto di controllo viene tenuto premuto fisicamente su un evento mouseup. Questo è tutto; non ci sono altre condizioni preliminari. Qualcuno sa come farlo in modo affidabile, cross-browser?

Ho provato memorizzare questo in una variabile di stato notando quando viene premuto il tasto e rilasciato:

// BEGIN store control key status in hash_state 
$().bind('keydown','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = true; 
    console.debug(hash_state.sw_ctrldn); 
}); 
$().bind('keyup','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = false; 
    console.debug(hash_state.sw_ctrldn); 
}); 
// END store control key status in hash_state 

Tuttavia, questa realtà non funziona. Se esegui il test usando firebug e guardi la console, vedrai che la ripetizione automatica sembra avvenire e il valore cambia.

ho ispezionato l'evento MouseUp per vedere se c'è qualcosa di utile lì, ma inutilmente:

var debugEvent = function(arg_obj_e){ 
    var str = ''; 
    for (var attr in arg_obj_e){ 
    str += attr + ': ' + arg_obj_e[attr] + '\n'; 
    } 
    console.debug(str); 
} 

Qualsiasi aiuto sarebbe apprezzato.

+0

Wow, non sapevo che jQuery supportasse gli eventi chiave in quel modo. Non riesco a trovare alcuna documentazione di esso. Inoltre, funziona $(). Bind() (vuoto jQuery) o è solo una scorciatoia? Se è così, è legato a $ (documento)? – eyelidlessness

+0

@eyelidlessness: questo tipo di binding proviene da un plug-in chiamato js-hotkeys http://code.google.com/p/js-hotkeys/ – CMS

risposta

32

È possibile utilizzare la proprietà event.ctrlKey.

$(function(){ 
    $('#elementId').mouseup(function(e){ 
    var isCtrlPressed = e.ctrlKey; 
    // true or false whether ctrl is pressed or not 
    }); 
}); 

controllare un esempio di esecuzione here.

+0

Wow, stavo cercando quella proprietà durante il debug dell'evento e devo aver perso esso. Grazie! Funziona come un fascino su FF3; ora per vedere su IE. –

+0

ps grazie per la demo, è molto apprezzato. –

+0

Prego Michael, questi modificatori di tasti (shiftKey, ctrlKey, altKey) sono stati introdotti nello standard * DOM Level 2 * (http://is.gd/1Vryp) alla fine dell'anno 2000 e sono supportati da IE6. – CMS

Problemi correlati