在 Chrome 浏览器中,使用此代码片段时:
$(document).on('keyup', function(){
alert("Hey");
});
每次我按下enter
在网址栏中(例如,当我剪切并粘贴页面本身的网址时),事件侦听器会触发。
为什么会发生这种情况?
EDIT:
这让我很惊讶,因为网址栏不在document
(也许在window
?)而 Firefox 没有这种行为。当我寻找e.target
, Chrome 检查器显示body
.
我认为这可能是由事件冒泡引起的,所以我尝试了以下方法:
$(document).on('keyup', function(e){
e.stopPropagation();
alert("Hey");
});
但这不起作用。
我怎样才能防止它被触发?
发生这种情况是因为一旦您在多功能框中按 Enter 键,焦点就会转向页面。如果你尝试过同样的事情onkeydown
,多功能框不会改变任何内容,因为正如您所说,它不是文档的一部分。过滤掉多功能框错误事件的一种方法是检查每个keyup
有一对按键。
<script>
var down = false;
document.addEventListener('keydown', function (){
down = true;
}, false);
document.addEventListener('keyup', function (){
if(down === true){
alert('It was from the page!');
}
else{
alert('Omnibox. Ignore it.');
}
down = false;
}, false);
</script>
Demo. http://pastehtml.com/raw/c9d7kwd2j.html#typeHereAndHitEnter罢工>
制作您自己的 HTML 页面并最好尝试一下,因为 PasteHTML.com 将其填充到 iframe 中。为了使其正常工作,请先单击文本以使 iframe 获得焦点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)