2009-09-17 198 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