<div class='wrapper'>
<button class='child'>Click me</button>
</div>
function h(e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
alert(e.type);
return false;
}
document.querySelector('.wrapper').addEventListener('mouseup', h, false);
document.querySelector('.child').addEventListener('click', h, false);
我希望这样可以防止“单击”事件的触发,但它不会。然而,将mouseup
更改为mousedown
实际上可以阻止单击事件。
我还尝试将useCapture
参数设置为true,这也不会在mouseup
中产生所需的行为。我在Chrome和Firefox上测试过这个。在我归档窃听器之前,我想我应该在这里问一下。
这是当前浏览器中的一个bug,还是有文档化的行为?
我已经复习了W3C标准(DOM级别2),我找不到任何可以解释这种行为的东西,但是我可能遗漏了一些东西。
在我的特殊情况下,我试图分离两段在同一元素上侦听事件的代码,我认为在具有优先级的部分使用捕获事件将是解决这一问题的最优雅的方法,但随后我遇到了这个问题。FWIW,我只需要支持官方支持的FF和Chrome版本(包括ESR for FF)。
发布于 2013-10-17 20:11:39
click
事件:
当鼠标向下操作和mouseup事件发生在同一元素上时触发。
因此,当鼠标单击被释放时,mouseup
和click
事件都会被触发,click
不会等待mouseup
回调完成。几乎所有情况下,mouseup
和click
都可以作为同义词使用。
为了取消click
,就像您演示的那样,可以在mousedown
事件回调中返回false
,这将阻止click
事件的完成。
发布于 2022-10-12 14:11:36
我只想为这个问题提供我的工作:
let click_works = true
this.addEventListener('mousedown', e => {
click_works = // condition why the click may work or not
})
this.addEventListener('click', e => {
if (click_works) // Do your stuff
})
希望它能帮助到别人。
https://stackoverflow.com/questions/18342747
复制相似问题