0

私はクロスブラウザー互換性があるはずのユーザースクリプトに取り組んでいます。これは、私が通常の方法で物事を行っていない理由を説明するかもしれません。このスクリプトは、jQuery オブジェクトである box という名前のフローティング div を表示します。クリック機能は次のようになります。

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 に答える