2010-01-04 88 views
9

在我的網頁上我有一個文件列表。當超鏈接點擊時防止父容器點擊事件發生

每一個文件是在它自己的div容器(DIV CLASS = 「文件」)。容器內部是指向文件和描述的鏈接。

我想讓用戶點擊容器上的任何位置來下載文件。我通過向容器添加一個單擊事件並獲取子鏈接的href來完成此操作。

由於文件在新窗口中打開,如果用戶實際點擊該鏈接,打開該文件的兩倍。

所以我需要防止父容器click事件從被點擊的超鏈接時開火。這樣做的最好方法是將超鏈接的點擊函數添加到0並設置event.stopPropagation?據推測,這會阻止事件冒泡到容器。

感謝 本

回答

8

是,使用stopPropagation。請參閱:Prevent execution of parent event handler

+8

是誰告訴你他的使用jQuery? – 2010-01-04 01:35:26

+1

不使用jQuery。 onClickHandler(event){event.stopPropagation(); } – 2017-01-11 23:57:52

15

在微軟模式必須將事件的cancelBubble屬性設置爲true。

window.event.cancelBubble = true; 

在W3C模型中,您必須調用事件的stopPropagation()方法。

event.stopPropagation(); 

這裏是一個跨瀏覽器的解決方案,如果你不使用一個框架:

function doSomething(e) { 
    if (!e) e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
+4

這是有點令人困惑,因爲你沒有顯示什麼重視什麼。 – daveagp 2011-07-26 14:57:54

2

感謝您的幫助。

我正在使用jQuery,但很好理解非框架解決方案。

添加的鏈接如下:

$(".flink").click(function(e) { 
     e.stopPropagation(); 
    }); 

+0

謝謝!我遇到了這個問題,這是非常煩人的調試,這解決了它。在我的情況下,我有一個點擊處理程序的.pub,然後添加行$(「。pub a」)。click(function(e){e.stopPropagation();}); – daveagp 2011-07-26 14:58:42

+0

不從事件處理函數返回false是否具有相同的效果? – Johnus 2011-10-01 12:54:30

+0

@Johnus - 不,它不 - 看到http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ – 2011-10-13 09:50:49