2010-10-10 108 views

回答

4

您可以使用event propagation (bubbling),你的優勢在這裏,例如:

$("#button").click(function(e) { 
    //show #box 
}); 
$("#button, #box").click(function(e) { 
    e.stopPropagation(); 
}); 
$(document).click(function() { 
    $("#box").hide(); 
}); 

You can test it out here,如果點擊按鈕或元素(#box在這種情況下)內,該事件不會冒泡。從其他地方它不會冒泡,達到document,隱藏了#box

+0

我確定我最終可以弄明白,但這對你來說可能是一件容易的事。我如何使用切換而不是點擊來實現這個#button? – Johnny 2010-10-10 21:56:00

+0

@Johnny - 我想你還是想'。點擊()'這裏有一個'.toggle()'的元素(如顯示隱藏,隱藏如果顯示),像這樣:http://jsfiddle.net/ nick_craver/zDhv5/10/ – 2010-10-10 22:05:57

+0

我在看到您的評論之前就明白了這一點,您如何看待此代碼與您的反對? $('#button')。toggle(function(){ \t //顯示方框 },function(){ \t //隱藏方框 }); $( 「#箱」)點擊(函數(){ \t e.stopPropagation();} )。 ('#box')。(':visible')){ $(document).click(function(){ \t $(「#button」)。trigger('click') ; \t} }); – Johnny 2010-10-10 22:16:05

-1
$(':not(#box)').bind('click', function() { 
    // this should match everything except your box 
});
+1

請*不*要做到這一點,它會結合事件處理程序的*噸*和沒有解決問題(任何元素*裏面*'#box'仍然會關閉它 – 2010-10-10 21:13:17

+0

想過做這個,但像尼克說這不正是我會需要感謝您的建議 – Johnny 2010-10-10 21:15:56

+2

@Johnny - !一定要認識到這也是巨大的低效率,如果你的DOM中有41,000個元素,這將綁定40,999個事件處理程序......這不是解決任何問題**。亞歷克,我不確定你是否完全想過你的代碼在做什麼,我會重新考慮混合全局選擇器(在這裏暗示爲'*:not()')和綁定的任何方法。 – 2010-10-10 21:19:19

相關問題