首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件vs MouseEvent

事件vs MouseEvent
EN

Stack Overflow用户
提问于 2018-07-06 21:15:15
回答 3查看 1.2K关注 0票数 1

我正在编写一个铬扩展名,当shiftKey被按下时,我想做一些事情,同时点击一个项目。我知道怎么弄到变形金钥:

代码语言:javascript
复制
event.shiftKey

但问题是,有时传递给click处理程序的click对象是Event类型的,有时是MouseEvent类型的,当事件是Event类型时,没有shiftKey的属性。这是我添加eventListener的时候:

代码语言:javascript
复制
elemet.addEventListener('click', handleOnClick);

下面是handleOnClick函数:

代码语言:javascript
复制
function handleOnClick(event) {
    console.log(event);
    if (event.shiftKey) {
        // do something
    }
}

下面是我在铬控制台中看到的内容:有时:

代码语言:javascript
复制
Event {isTrusted: false, type: "click", ...}

在这种情况下,即使按下shift键,也不会执行if语句。

有时:

代码语言:javascript
复制
MouseEvent {isTrusted: true, screenX: -1611, screenY: -91, clientX: 766, clientY: 90, …}

在这种情况下,在按shift键时执行if语句。

有人能帮忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-06 22:44:29

如果其他人遇到了同样的问题,请发布这篇文章。我通过执行element.onmousedown = handleOnClick;而不是element.addEventListener('click', handleOnClick);来修正这个问题。现在传递给handleOnClickhandleOnClick总是MouseEvent,而我可以做event.shiftKey

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 21:34:10

我知道如何获得shiftkey:event.shiftKey

嗯,不完全是。事件必须是支持它的事件。所有其他人继承的标准Event都没有.shiftKey属性。键盘事件,比如keyupkeydown (而不是keypress)。

现在,如果您正确地设置了一个click事件处理程序,那么当一个click发生并且MouseEvent也有一个.shiftKey属性时,MouseEvent将触发什么。

因此,只要您正在处理click (即MouseEvent),您将始终能够获得event.shiftKey

代码语言:javascript
复制
$(document).on('click', function(e){
  console.log(e.shiftKey);
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 21:41:43

使用另一个事件处理程序,该处理程序侦听键事件,并设置一个可供两个侦听器访问并保持shift键状态的变量。示例:

代码语言:javascript
复制
var shiftPressed = false;

test.onclick = (evt)=>console.log(shiftPressed ? 'With shift' : 'No shift');

window.onkeydown = (evt)=>{shiftPressed = evt.shiftKey;};
window.onkeyup = (evt)=>{shiftPressed = evt.shiftKey;};
代码语言:javascript
复制
<button id='test'>Click Me with and without shift!</button>

记住,您必须在文档中单击,以便在测试之前使其具有焦点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51217692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档