2009-09-17 186 views
10

我試圖檢測在特定元素上移動光標時是否按下了shift鍵。該功能觸發,但只有我先點擊另一個元素。有什麼辦法可以解決這個問題嗎?我已經嘗試將焦點設置爲文檔和元素,並嘗試創建一個僞點擊功能,但迄今沒有任何工作。用jQuery Shift +鼠標懸停

例如,下面的代碼工作後,才點擊頁面上的其他元素:

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

預先感謝任何信息。

+0

如果動作設置懸停,動作怎麼會啓動?我懷疑代碼存在一些不同的問題(在發佈部分旁邊)。 – dusoft 2009-09-17 20:33:17

+0

@dusoft:我已經在一個完全新的文檔中測試過,沒有其他的javascript/jQuery(除了jQuery源代碼)和頁面上的單個元素具有相同的結果。 (還是)感謝你的建議。 – 2009-09-17 20:39:51

回答

10

支票本上的按鍵事件:

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

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

} 

然後在KEYUP:

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

然後執行:

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

或周圍的其他方法:

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

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

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

    } 
+0

我不確定我是否理解你想要做的100%,但我認爲其中的一個應該可以工作。 – marcgg 2009-09-17 21:00:08

+0

@marcgg:謝謝你的迴應。事實證明,我需要調整我在做的一些事情,但是這回答了我的第一個問題。 – 2009-09-21 14:31:19

+1

太複雜。 KISS(保持簡短)。查看Martin Schaer的答案! :-) – JMW 2013-06-19 14:07:30

1

我試過這樣的代碼,它完美的工作。不過,你必須「轉移」鼠標懸停。

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

它應用於什麼類型的元素?

+0

@Mark:它被應用於img,但我需要調整我正在做的事情。感謝您的回覆 - 但它有幫助。 – 2009-09-21 14:32:46

8

當按下和鬆開變速鍵這是沒有必要在一個變量來存儲。你可以達到你想要的效果:

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

這應該是正確的答案:-)請將.click()替換爲.mouseover() – JMW 2013-06-19 14:06:05