2012-05-13 14 views
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> 

トグルが正常に動作しますが、私は上のクリックしたとき「ここをクリックしてボディーイベントを試してください」と表示されてもアラートは表示されます。子イベントを個別に参照せずにボディイベントがバインドされている場合、すべての子イベントを無視できるようにします。私はトグルにこのような何かを行うよりも、よりよい解決策を探していますつまり

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

答えて

0

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

+2

。親がイベントを持っている場合、子供のために発砲しないでください。 StopPropagationは、反対のシナリオでのみ有効です。 – mrtsherman

+0

humm ...それは本当です、ありがとう! –

+0

ええ、親イベントの前に子イベントがトリガーされることに注意してください。 –

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'); 
    } 
});​ 
関連する問題