我有这段代码在 Safari 和 Chrome 上工作,但不在 Firefox 上。 firefox 对 StopPropagation() 有问题吗?
$(function() {
// Setup drop down menu
$('.dropdown-toggle').dropdown();
// Fix input element click problem
$('.login-menu form').click(function(e) {
alert(e.isPropagationStopped());
e.stopPropagation();
alert(e.isPropagationStopped());
});
});
最佳答案
我不知道您的 HTML 看起来如何,但 stopPropagation
在 FireFox 中运行良好。
我认为您的期望可能不正确。
根据 stopPropagation() 的文档
假设这样的 HTML 例如:
<div id="parent">
<div class="login-menu">click anywhere</div>
</div>
这段代码工作正常,点击事件没有冒泡:
$(function() {
// Fix input element click problem
$('.login-menu').click(function(e) {
alert(e.isPropagationStopped());
e.stopPropagation();
alert(e.isPropagationStopped());
});
$("#parent").click(function(e){
alert("parent received click");
});
});
DEMO - 适用于 FF - 不会冒泡事件
注释掉 DEMO 中的
e.stopPropagation();
行,正如预期的那样,事件冒泡了,显示了来自父级的警报。你的预期行为是什么?
你没有具体说明你期望发生什么。
例如,如果您希望触发事件 no 的默认操作,则可以使用 preventDefault()
如果您想同时覆盖两者,请防止默认操作并防止事件冒泡,您要么调用两者,要么在方法的末尾简单地使用
return false
。如果您可以详细说明您想要实现的目标,我们可以更具体地建议一个适合您的解决方案。