1

したがって、子イベントが親イベントをトリガーしないようにする方法を尋ねる質問はたくさんありますが、反対の質問は見つからないようです。

次のように、親イベントのオンとオフを切り替えます。

var body_event = function(e){
    console.log('test');
};

$('#btn').toggle(
    function(e){
        $('body').bind('click', body_event);
    }, 
    function(){
        $('body').unbind('click', body_event);
    }
);

現在、次のようなページでこれを実行すると、次のようになります。

<body>
    <div id="btn">click to activate</div>
    <div id="example" onclick="alert('do not show this when event is bound')">
        try the body event by clicking here
    </div>
</body>

トグルは正常に機能しますが、[ここをクリックしてボディイベントを試す]をクリックしても、アラートは引き続き表示されます。子イベントを個別に参照せずに、bodyイベントがバインドされている場合、すべての子イベントを無視できるようにしたいと思います。

言い換えれば、私はトグルでこのようなことをするよりも良い解決策を探しています:

$('#example").attr('onclick', '');
4

2 に答える 2

1

これは近いですが、完全ではありません。特定の関数がバインドされているかどうかはチェックせず、jQuery オブジェクトにイベントがバインドされているかどうかのみをチェックします。

イベントがクリックにバインドされているかどうかを確認するためにイベントを照会する方法が必要であり、その後、それが指している機能も必要です。うまくいけば、これで始めることができます。

http://jsfiddle.net/PhjB8/

var body_event = function(e) {
    alert('test');
};

$('#btn').toggle(

function(e) {
    $('body').addClass('active').bind('click', body_event);
}, function() {
    $('body').removeClass('active').unbind('click', body_event);
});

$('#example').click(function() {
    //debugger;
    if ($('body').data('events') == undefined) {
        alert('do not show this when event is bound');
    }
});​
于 2012-05-13T04:41:13.197 に答える
0

event.stopPropagation() は body_event 内でこの問題を解決できますか?

于 2012-05-13T02:58:54.697 に答える