0

我正在开发一个应该是跨浏览器兼容的用户脚本,这可以解释为什么我没有以正常方式做事。该脚本显示一个名为 box 的浮动 div,它是一个 jQuery 对象。点击函数如下所示:

box.click(function(event) {
    set_visible(false);
});

set_visible 函数只是做一个box.fadeOut(500);

在父 div 中,我创建了一个菜单,不使用 jQuery,而是使用类似这样的函数数组创建普通的旧 javaScript(我尝试使用 jQuery 重写此函数,但在使数组函数工作时遇到了一些问题):

function doGMMenu() {
    if( !GM_falsifiedMenuCom.length ) { return; }
    var mdiv = document.createElement('div');
    for( var i = 0; GM_falsifiedMenuCom[i]; i++) {
        var bing;
        mdiv.appendChild(bing = document.createElement('a'));
        bing.setAttribute('href','#');
        bing.onclick = new Function('GM_falsifiedMenuCom['+i+'][1](arguments[0]); return false;');
        bing.appendChild(document.createTextNode(GM_falsifiedMenuCom[i][0]));
        if (i+1<GM_falsifiedMenuCom.length)
            mdiv.appendChild(document.createTextNode('\u00A0\u00A0|\u00A0\u00A0'));
    }
    status.contents().append(mdiv);
}

这是显示选项菜单的第一个数组函数的示例:

 function() { DisplaySlideMenu(true); }

我的问题是,当我单击链接时,会显示选项菜单,但也会调用父 div 的 box.click 函数,当我不想这样做时会隐藏它。添加锚点 .onclick 函数后,您可以看到最后一个条目是return false;,但这不会阻止 .click 事件传播到父 div。有什么办法可以防止这种情况发生吗?

4

1 回答 1

0
box.click(function(event) {
    event.stopImmediatePropagation();
    event.stopPropagation();
    set_visible(false);
});
于 2013-02-03T21:31:09.687 回答