2012-09-19 71 views
2

我有一些jQuery代碼以關閉我的菜單:stopPropagation(),但保持活躍其他點擊事件

$('body').click(function(){ 
    $('#menu').hide(); 
}); 
$("#menu").click(function(e) { 
    e.stopPropagation(); 
    return false;  
}); 

但是我#menu元素我有點擊連接到他們的活動的一些元素:

$('.menu_elem').live("click", function(){ 
    //Do something 
}); 

我的問題是,e.stopPropagation()阻止我的菜單點擊事件。我怎樣才能避免這種情況?

回答

1

我不知道我理解你的HTML準確,但如果#menu是你的根[R菜單和.menu_elem在菜單中的菜單項,那麼你可以在#menu這樣的改變你的委託事件處理要捕獲:

$("#menu").on("click", ".menu_elem", function() { 
    // do something 
}); 

這具有以下優點:

  1. 它改變委派的事件處理捕獲#menu上的冒泡事件,因此它不需要傳播超越#menu以便工作,因此您不必更改您的.stopPropagation()代碼。

  2. 它從(現在不推薦使用的).live()切換到更換.on(),這使您可以更好地控制捕獲冒泡事件的位置。

+0

謝謝!完美的工作=) – Undefined

2

您可以使用e.target包括或條件stopPropagation排除元素,

$("#menu").click(function(e) { 
    if(e.target.id == "menu") 
    { 
    e.stopPropagation(); 
    return false;  
    } 
}); 
+0

謝謝,這工作,但它不是我所需要的。我的錯在沒有更清楚的問題=( – Undefined

+0

不客氣 – Adil

0

寫了要執行,並調用它調用stopPropagation之前,你的代碼..

$("#menu").click(function(e) { 

// Your code here 
    e.stopPropagation(); 
    return false;  
}); 

或者使用target屬性包含點擊事件