我使用以下color picker它工作正常,但是當我點擊顏色選擇器圖標時,我不想它冒泡到身體。所以我嘗試了以下,現在顏色選擇器不工作。jQuery stopPropagation不工作
如果你從jsfiddle中刪除下面的代碼,那麼它的工作原理。是什麼原因造成這種
$('#test').click(function(e){
e.stopPropagation();
});
我使用以下color picker它工作正常,但是當我點擊顏色選擇器圖標時,我不想它冒泡到身體。所以我嘗試了以下,現在顏色選擇器不工作。jQuery stopPropagation不工作
如果你從jsfiddle中刪除下面的代碼,那麼它的工作原理。是什麼原因造成這種
$('#test').click(function(e){
e.stopPropagation();
});
這似乎是使用自己的live()
style code,在事件被允許冒泡並在document
進行處理。
因此,事件必須傳播到document
或他們不會工作。
您可避免事件觸發機身採用以下解決方法......
$('body').click(function(event) {
if ($(event.target).parent()[0] == $('.mColorPickerTrigger')[0]) {
return true;
}
});
或者,這可能與多個拾色器更好地工作......
$('body').click(function(event) {
if ($(event.target).parent().hasClass('mColorPickerTrigger')) {
return true;
}
});
謝謝,這適用於圖標的特定情況,但它希望div #test內的所有內容不會冒泡到正文,這就是爲什麼我使用包裝#test。這仍然是可能的。 – Pinkie 2011-05-19 07:33:45
就像@alex提到的那樣,顏色選擇器似乎在使用live()
來監聽整個文檔的點擊。在阻止傳播之前,您可以檢查事件是否源自顏色選擇器,如果它發生了,就讓它起泡。您需要使用closest()
,因爲可以單擊顏色選擇器圖標的<span>
容器或<img>
元素。
$('#test').click(function(e){
if($(e.target).closest('.mColorPickerTrigger').length) return;
e.stopPropagation();
});
檢查出的jsfiddle演示:http://jsfiddle.net/CWGgM/1/
是的,但你擁有它的方式,它仍然會冒泡到身體。我相信既然顏色選擇器是用來製作文檔的,那麼就沒有辦法解決這個問題了。 – Pinkie 2011-05-19 18:13:32
我的解決方案阻止**所有內容,但是**顏色選擇器的單擊事件,爲什麼會出現這種問題?它實際上是一種與您接受的解決方案類似的解決方案,除非您單擊圖標旁邊的'',否則,如果啓用'stopPropagation()'行,我無法獲得任何已接受的答案,這就是你想要做的第一件事。在我的示例中,其他所有事情都停止在div上傳播*,阻塞的警報不在主體上,但是在調用實際可行的'stopPropagation()'之前。 – DarthJDG 2011-05-19 18:26:27
你的解決方案仍然泡在身體上,這不是我想要的。檢查http://jsfiddle.net/CWGgM/2/ – Pinkie 2011-05-19 18:44:26
你鏈接到正確的小提琴? – alex 2011-05-19 05:26:44
@alex oops。固定。它是http://jsfiddle.net/CWGgM/ – Pinkie 2011-05-19 05:27:37