页面加载后忽略第一次单击

时间:2016-04-01 14:36:14

标签: javascript onload

这个网页有一个简单的事件监听器,当我右键单击它阻止打开上下文菜单。很简单。

但是当我刷新页面或初始加载页面时,如果我从右键单击页面开始,它会显示上下文菜单,然后在我之后单击鼠标右键时阻止它。我在Chrome,FireFox和IE中尝试过它。相同的结果。

我在鼠标按下,键控或触摸事件等方面遇到同样的问题。就像第一次点击被忽略一样。我正在寻找JavaScript解决方案(而不是jquery)。我错过了什么?

<html>
<head>
<title>test</title>
<script type="text/javascript">
window.onload = function () {
    window.addEventListener("contextmenu", mouseright);
}
function mouseright() {
    document.oncontextmenu = function(e) {
        var e = e || window.event;
        alert("right");
        e.preventDefault();
    }
}
</script>
</head>
<body>
hello world
</body>
</html>

我甚至尝试在事件监听器之前添加它(如本文keydown not detected until window is clicked中所述),对document.onload没有好运,并确实看到它可能是浏览器关注页面加载设置。我没有在JavaScript中尝试任何想法或其他想法?

if (document.hasFocus() == true) {
  } else {
    window.focus();
  }

1 个答案:

答案 0 :(得分:1)

您不必要地分配事件两次(同时window.contextmenudocument.oncontextmenu)。删除额外的包装似乎有效:

window.onload = function () {
    window.addEventListener("contextmenu", mouseright);
}
function mouseright(e) {
    var e = e || window.event;
    alert("right");
    e.preventDefault();
}

window.onload也可能不需要,具体取决于您在文档中放置addEventListener的位置。)