2011-10-03 35 views
1

我有以下的jQuery:jQuery的單擊事件重寫對方

$('.io-sidebar-section').click(function() { 
     console.log('Section Clicked'); 
     $(this).next().fadeToggle('fast',function(){}); 
    }); 

    $('.io-sidebar-section-advanced-toggle').click(function(){ 
     $(this).parent().next().children('.io-sidebar-link-advanced').fadeToggle('fast',function(){}); 
    }); 

先進的切換是一個側邊欄部分的內部。當我點擊高級切換時,它會執行邊欄部分點擊。

我怎麼把這兩個分開?

回答

5

您可以使用事件對象的stopPropagation方法的子元素click事件處理中:

$('.io-sidebar-section-advanced-toggle').click(function(e){ 
    e.stopPropagation(); 
    $(this).parent().next().children('.io-sidebar-link-advanced').fadeToggle('fast',function(){}); 
}); 

從jQuery的文檔,這裏是stopPropagation做:

阻止事件從冒泡DOM樹,阻止任何父處理程序被通知事件。

正如評論所說,如果你喜歡,你可以或者在事件處理程序使用return false(在這種特殊情況下,據我反正可以告訴我們 - 這也將導致preventDefault這可能不是你想要的即將發生)。我的個人偏好是使用stopPropagation,但完全取決於您。

+0

它更容易只是'回報(假)'從單擊處理和jQuery會爲您處理停止傳播。 – jfriend00

+0

的確如此,但我只是覺得'stopPropagation'更清晰。 –

+0

注意,返回'false'也會阻止默認事件觸發(類似於調用'e.preventDefault();')。這可能不合意。 – Clive