javascript - event.stopPropagation 在 Firefox 中不起作用

标签 javascript firefox stoppropagation

我正在构建一个包含主菜单项和一级子菜单项的侧边栏垂直菜单。

我正在使用 Javascript 和 CSS,这样当用户单击顶级菜单项时,其子菜单项将切换其可见性 - 即单击主项,其子项将出现。再次点击主项,子项消失。

为了避免在用户单击子菜单项时切换子菜单,我使用了 event.stopPropagation() 方法。

期望的结果适用于 Chrome、Safari 和 Dolphin,但不适用于 Firefox 26.0 和 Android Firefox 26.0.1。

如果你运行 this example (JSBin) ,您会注意到您可以单击 Menu 2 和/或 Menu 3,然后会显示一个子菜单。这部分在所有浏览器中都很好。

但是,如果您在 Firefox 中单击子菜单项(即 Menu 3.1),子菜单将消失——这不是我想要的效果。如果您在 Chrome/Safari 中单击子菜单项,子菜单将保持可见 - 这正是我想要发生的。

我阅读了Mozilla Developer Network ChromeFirefox (Gecko)IE9OperaSafari (WebKit)。所以,我很困惑为什么 stopProp 方法在我的情况下不起作用。

你能看看我的 JS 示例并告诉我发生了什么吗?

这是我正在运行的 Javascript ( also at JSBIN ):

function goTo(id) {
     event.stopPropagation();
     location.href = id;
 }

 function toggleChildDisplay(parentElement) {
     var children = parentElement.children;
     var displayStyle = "";
     for (var i = 0; i < children.length; i++) {
         displayStyle = children[i].style.display;
         if (displayStyle.toLowerCase() === "none" || displayStyle === "") 
             children[i].style.display = "list-item";
         else 
             children[i].style.display = "none";
     }
}

...这是 HTML:

<ul class="level1">
    <li onclick="toggleChildDisplay(this)">Menu 1</li>
    <li onclick="toggleChildDisplay(this)">Menu 2
        <ul class="level2">
            <li onclick="goTo('#')">Menu 2.1</li>
            <li onclick="goTo('#')">Menu 2.2</li>
            <li onclick="goTo('#')">Menu 2.3</li>
        </ul>
    </li>
    <li onclick="toggleChildDisplay(this)">Menu 3
        <ul class="level2">
            <li onclick="goTo('#')">Menu 3.1</li>
            <li onclick="goTo('#')">Menu 3.2</li>
        </ul>
    </li>
</ul>

附言我正在开发的环境不允许我使用 jQuery。

最佳答案

您需要将事件作为参数传递给您的函数。

goTo(event, '#')

然后你可以执行 event.stopPropagation() 它知道什么是事件。

http://jsbin.com/OyUvUqa/2

关于javascript - event.stopPropagation 在 Firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445532/

相关文章:

javascript - 为什么 event.stopPropagation 也停止了我的 Bootstrap Collapse?

jQuery:当底层元素使用 "event.stopPropagation()"设置单击事件时了解 "find()"

javascript - jQuery on() stopPropagation 不起作用?

javascript - 如何从延迟加载的模块访问根状态?

javascript - Firefox 插件 : how to remove preferences when addon is being uninstalled?

javascript - 对象数组上的 Array.reduce() ——返回单个字母的字符串

javascript - Websocket建立防弹连接

html - Firefox 打印太小

javascript - Money.js + LocalStorage 费率

javascript - 如何使用express在nodejs中执行promise