我有这段代码在 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

如果您可以详细说明您想要实现的目标,我们可以更具体地建议一个适合您的解决方案。

10-07 14:44
查看更多