2009-09-17 16 views
10

Estoy tratando de detectar si se está presionando la tecla shift mientras el cursor se mueve sobre un elemento en particular. La función se dispara, pero solo después de Primero hago clic en otro elemento. ¿Hay alguna forma de evitar esto? Intenté establecer el foco tanto en el documento como en el elemento, e intenté crear una función de pseudo clic, pero hasta ahora nada ha funcionado.Shift + mouseover con jQuery

Por ejemplo, el código siguiente funciona sólo después de que haga clic en otro elemento de la página:

$("#selector").mouseover(function(e){ 
    if(e.shiftKey) { 
     console.log("the shift key is pressed"); 
    } 
}); 

Gracias de antemano por cualquier información.

+0

¿cómo podría la acción encenderse, si está activada? hay algún problema diferente con el código (al lado de la parte publicada), sospecho. – dusoft

+0

@dusoft: He probado en un documento completamente nuevo sin javascript/jQuery (aparte de la fuente de jQuery) y un solo elemento en la página con los mismos resultados. Gracias por la sugerencia, sin embargo. –

Respuesta

10

verificar esta información en el evento de pulsación de tecla:

$(document).keypress(function (e) { 

    if(e.shiftKey) { 
    pressed = true; // pressed is a global varialbe. Be carefull of the scope 
    } 

} 

luego en el keyup:

$(document).keyup(function(event){ 
    pressed = false; 
}); 

luego hacer:

$("#selector").mouseover(function(e){ 
    if(pressed) { 
     console.log("the shift key is pressed"); 
    } 
}); 

o al revés:

$("#selector").mouseover(function(e){ 
    isover = true; 
}); 

y

$(document).keypress(function (e) { 

     if(e.shiftKey) { 
     alert("do something") 
     } 

    } 
+0

No estoy seguro de haber entendido el 100% de lo que intenta hacer, pero creo que uno de los dos debería funcionar. – marcgg

+0

@marcgg: Gracias por la respuesta. Resultó que necesitaba ajustar un poco lo que estaba haciendo, pero esto respondió mi pregunta inicial. –

+1

Demasiado complejo. KISS (Que sea corto y simple). ¡Mira la respuesta de Martin Schaer! :-) – JMW

1

Probé este código así y funciona perfectamente. Sin embargo, tienes que "cambiar" y pasar el mouseover.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script> 
    loadHandler = function(){ 
     $("#selector").mouseover(function(e){ 
      if(e.shiftKey) { 
       alert("the shift key is pressed"); 
      } 
     }); 
    } 
</script> 
</head> 
<body onload="loadHandler();"> 
<div style="border:1px solid black" id="selector"> 

    <br/> 
    <br/> 

    This is a div. 

    <br/> 
    <br/> 

<div> 
</body> 
</html> 

¿A qué tipo de elemento se está aplicando?

+0

@Mark: se estaba aplicando a un img, sin embargo, necesitaba ajustar lo que estaba haciendo. Gracias por su respuesta, sin embargo, ayudó. –

8

No es necesario almacenar en una variable cuando se presiona y suelta la tecla de mayúsculas. Puede lograr lo que está tratando de que le guste esto:

$('#selector').mouseover(
    function(e){ 
     if (e.shiftKey) 
     { 
      console.log("the shift key is pressed"); 
     } 
    } 
); 
+1

Esta debería ser la respuesta correcta :-) reemplace .click() con .mouseover() – JMW

Cuestiones relacionadas