2010-11-13 20 views
9

Actualmente estoy usando el código kepypress Javascript para desencadenar eventos sobre pulsación de tecla:Bind llaves múltiples para pulsación de tecla Evento

$(document).keydown(function(e) { 
    switch(e.keyCode) { 

    case 39: 
     e.preventDefault(); 
     alert("Arrow Key"); 
     break; 

    case 37: 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 

pero lo que me pregunto es si puedo en lugar de unirlas una unen clave una combinación de dos teclas . Podría yo hacer algo como:

$(document).keydown(function(e) { 
    switch(e.keyCode) { 
     case 39 && 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
     break; 
    } 
}); 
+0

Qué quiere decir ellos presionando al mismo tiempo? Luego puede ver http://stackoverflow.com/questions/1652210/can-i-intercept-control-a-keypresses-on-ie. –

Respuesta

24

Si desea verificar varias teclas a la vez, solo debe usar una tecla normal y una o más teclas modificadoras (alt/shift/ctrl) ya que no puede estar seguro de que se pueden presionar dos teclas regulares al mismo tiempo. teclado del usuario (en realidad, siempre se pueden presionar, pero la PC podría no entenderlo debido a la forma en que están conectados los teclados).

Puede usar los campos e.altKey, e.ctrlKey, e.shiftKey para verificar si se presionó la tecla modificadora coincidente.

Ejemplo:

$(document).keydown(function(e) { 
    if(e.which == 98 && e.ctrlKey) { 
     // ctrl+b pressed 
    } 
}); 
+0

Gracias, realmente aprecio la ayuda. Sí, esto es más de lo que estaba buscando. Gracias de nuevo. – mcbeav

+0

Perfecto, perfecto, perfecto, ¡exactamente lo que estaba buscando esta mañana! – SchweizerSchoggi

3

Por qué no usar if en lugar de switch?

$(document).keydown(function(e) { 
    if ((e.keyCode === 37) || (e.keyCode === 39)) { 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 
+0

Sí, esto servirá, no sé por qué prefiero usar un interruptor, pero supongo que realmente no importa. Gracias de nuevo por la ayuda. Muy apreciado. – mcbeav

+0

Sé que esto no tiene nada que ver con esta publicación, pero si ves esto, ¿podrías ayudarme con el complemento jQuery LazyLoad si tienes un minuto? – mcbeav

+0

Simplemente curiosidad, pero ¿cómo puede ser esta tu respuesta aceptada mientras dices "Estoy buscando algo que funcione para una combinación de teclas presionadas. ¿Alguna idea?" en otro comentario? – ThiefMaster

3

Usted puede utilizar el caso fallthrough:

$(document).keydown(function(e) { 
    switch(e.which) { 
     case 39: 
     case 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
      break; 
    } 
}); 

Tenga en cuenta que estoy usando en lugar de e.whiche.keyCode para que funcione en todos los navegadores (jQuery asigna automáticamente la propiedad que en realidad contiene el código de la llave a e.which).

+1

No. Para un evento 'keydown',' keyCode' es la propiedad correcta en todos los navegadores. ¿Tal vez estás pensando en los eventos 'keypress'? –

+0

Estoy a punto de probar esto, pero solo para estar seguro, esto va a disparar al presionar ambas teclas, una combinación, ¿verdad? – mcbeav

+0

no, este código no es para 'combination', esto es para' cualquiera de ellos está presionado'. –

Cuestiones relacionadas