1

HTML-DOM の任意の場所をクリックして閉じる必要があるコンテキスト メニューがあります。

マイ コンテキスト メニュー

私の問題: コンテキスト メニューのリンクMake Actionをクリックしても実行できません。コンテキスト メニューは、以前に削除されます。ここに私のコードがあります:

$(document).ready(function() {

    $('html').not(".contextMenu").on('mousedown', function () {

        // remove context menu
        $('.contextMenu').remove();
    });

    $('.contextMenu a').click( function() {
        alert('action');
        $('.contextMenu').remove();
    });   
});

jQuery の -Function.not()はここでは機能しないようです。私も:not(.contextMenu)Sizzle 経由で試してみましたが、成功しませんでした。mousedown右クリックするとコンテキストメニューも削除されるため、を使用しました。

これがフィドルです:http://jsfiddle.net/9Y5Fz/1/

4

4 に答える 4

0

.not標準的な解決策は、伝播を防ぐことです。あなたはこれを行うことができます :

$('html').on('mousedown', function () {
    // remove context menu
    alert('NO action');
    $('.contextMenu').remove();
});

$('.contextMenu a').click( function() {
    alert('action');
    $('.contextMenu').remove();
    return false; // avoids propagation and so prevents the click on "html"
}).on('mousedown', function(){
    return false; // avoids propagation and so prevents the mousedown on "html"
}) ;  

デモンストレーション

于 2013-11-05T07:54:02.700 に答える
0

これはどうですか:

$(document).ready(function() {
    $(document).on('mousedown', function()
    {
        $('.contextMenu').hide();
    })

    $('.contextMenu').on('mousedown', function(e)
    {
        e.stopPropagation();          
    })
});

.contextMenuドキュメント内の任意の場所をクリックすると、 が削除されます。ただし、.contextMenuそれ自体をクリックすると、トリガーされた最初の機能がキャンセルされます。
.remove() は DOM から削除するため、.hide() を使用することに注意してください。ただし、.contextMenu再度表示するかどうかによって異なります。

jsフィドル

編集
コメントに基づく両方のマウス クリックのサポートが追加されました。

于 2013-11-05T07:55:34.580 に答える
0

documentの代わりに使用しますhtml。これを試してください:

$(document).on('click', function () {

デモ: http://jsfiddle.net/9Y5Fz/4/

于 2013-11-05T07:56:28.530 に答える