2009-09-17 16 views
10

Sto provando a rilevare se il tasto Maiusc viene premuto mentre il cursore viene spostato su un particolare elemento. La funzione si attiva, ma solo dopo Faccio clic prima su un altro elemento. C'è un modo per aggirare questo? Ho provato a mettere a fuoco sia il documento che l'elemento, e ho provato a creare una funzione pseudo-clic, ma finora nulla ha funzionato.Maiusc + passaggio del mouse con jQuery

Ad esempio, il seguente codice funziona solo dopo che clicco un altro elemento sulla pagina:

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

Grazie in anticipo per qualsiasi informazione.

+0

come attivare l'azione, se impostata su hover? c'è qualche problema con il codice (oltre alla parte postata), sospetto. – dusoft

+0

@dusoft: ho testato un documento completamente nuovo senza altri javascript/jQuery (a parte il sorgente jQuery) e un singolo elemento nella pagina con gli stessi risultati. Grazie per il suggerimento però. –

risposta

10

controllo questo sull'evento pressione dei tasti:

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

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

} 

poi sulla keyup:

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

poi fare:

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

o viceversa:

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

e

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

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

    } 
+0

Non sono sicuro di aver capito il 100% di quello che stai cercando di fare, ma penso che uno dei due dovrebbe funzionare. – marcgg

+0

@marcgg: Grazie per la risposta. Ho scoperto che avevo bisogno di aggiustare quello che stavo facendo un po ', ma questo ha risposto alla mia domanda iniziale. –

+1

Troppo complesso. BACIO (tienilo breve e semplice). Dai un'occhiata alla risposta di Martin Schaer! :-) – JMW

1

Ho provato il codice in questo modo e funziona perfettamente. Devi però "spostare" e poi passare il mouse.

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

Che tipo di elemento viene applicato?

+0

@ Mark: veniva applicato a una img, tuttavia dovevo regolare ciò che stavo facendo. Grazie per la tua risposta - mi ha aiutato. –

8

Non è necessario memorizzare in una variabile quando viene premuto il tasto shift e rilasciato. Puoi ottenere ciò che desideri:

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

Questa dovrebbe essere la risposta giusta :-) per favore sostituisci .click() con .mouseover() – JMW

Problemi correlati