2009-07-31 13 views
16

He buscado mucho y parece que no puedo encontrar una solución satisfactoria. Espero que alguien pueda ayudar.Javascript Detectar clave de control mantenida en Mouseup

Mientras uso jQuery, también estoy escribiendo miles de líneas de Javascript. Entonces, una solución javascript "pura" está bien.

Estoy tratando de determinar si la tecla de control se mantiene físicamente presionada en un evento de mouseup. Eso es; no hay otras condiciones previas. ¿Alguien sabe cómo hacer esto de manera confiable, entre navegadores?

he intentado almacenar esto en una variable de estado observando cuando se presiona y suelta la tecla:

// 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 

Sin embargo, esto realmente no funciona. Si prueba esto usando Firebug y mira la consola, verá que la repetición automática parece suceder, y el valor cambia.

inspeccioné el evento mouseup para ver si hay algo útil allí, pero fue en vano:

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); 
} 

Cualquier ayuda se agradece.

+0

Guau, no sabía que jQuery soportaba los eventos clave de esa manera. No puedo encontrar ninguna documentación de eso. Además, ¿funciona $(). Bind() (jQuery vacío), o solo es taquigrafía? Si es así, ¿está obligado a $ (documento)? – eyelidlessness

+0

@eyelidlessness: Ese tipo de enlace proviene de un complemento llamado js-hotkeys http://code.google.com/p/js-hotkeys/ – CMS

Respuesta

32

Puede usar la propiedad event.ctrlKey.

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

Consulte un ejemplo de ejecución here.

+0

Guau, estaba buscando esa propiedad durante la depuración del evento, y debo haberme perdido eso. ¡Gracias! Funciona como un encanto en FF3; ahora para ver sobre IE. –

+0

ps gracias por la demostración, es muy apreciada. –

+0

De nada, Michael, estos modificadores clave (shiftKey, ctrlKey, altKey) se introdujeron en el estándar * DOM Level 2 * (http://is.gd/1Vryp) a fines del año 2000, y son compatibles desde IE6. – CMS

Cuestiones relacionadas