双击事件中是否可能检测Ctrl键状态?

3

我正在使用Google地图API第三版。我希望我的双击事件处理程序按照以下方式工作:

google.maps.event.addListener(map, 'dblclick', function(e) {
  if (/* ctrl is pressed */) {
    doSomething(e)
  } else {
    doSomethingElse(e)
  }
});

看起来事件处理程序只提供了一个MouseEvent,其中不包含有关键盘状态的信息。我需要LatLng信息,因此我怀疑我无法使用JQuery的事件处理。

那么我现在没有办法了吗?


我想你可以保留一个全局变量,来判断ctrl是否被按下,并使用jQuery事件处理来更新它。 - Adam
2个回答

6
你可以缓存控制键的状态。
var ctrlPressed = false;
function cacheIt(event) {
    ctrlPressed = event.ctrlKey;
}
document.onkeydown = cacheIt;
document.onkeyup = cacheIt;

现在,ctrlPressed 应该始终反映控制键是否按下。

我曾担心在视口之外(例如地址栏)发生keyup/keydown事件的情况,但是以下代码似乎无论如何都能正常工作。这是我的代码,基本上就是你展示的内容。var ctrlKey = false; $(window).keydown(function(e){ ctrlKey = e.ctrlKey; }).keyup(function(e){ ctrlKey = e.ctrlKey;
}); }
- Lawrence Barsanti
1
Clarkf和Lawrence Barsanti在Windows上对FF、IE和Chrome进行了工作。在Ubuntu Chrome上,布尔值是相反的吗? - traildex
在Windows上,如果Chrome窗口外释放Ctrl键,则事件会丢失。 - shoosh

3
当缓存按键时,我总是将一个函数绑定到窗口对象的模糊事件上,以清除任何缓存的按键。否则,如果窗口失去焦点,您将会遇到卡死的按键。
这里有一个使用jQuery的示例:
$(window).blur( function () {
  // Clear cached key presses here
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接