2012-05-13 166 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'); 
    } 
});​ 
相關問題