2012-07-22 41 views
0

我在嘗試禁用單擊的鏈接。我有一個附加的onmousedown事件監聽器。e.preventDefault()和e.cancelBubble不能與附加的偵聽器一起工作

if(document.addEventListener){ 
    document.addEventListener("onmouseover", onMouseOverIdent, false); 
    document.addEventListener("onmousedown", onMouseDownIdent, false); 
    document.addEventListener("onmouseout", onMouseOutIdent, false); 
}else{ 
    if(document.attachEvent){ 
     document.attachEvent("onmousedown",onMouseDownIdent); 
     document.attachEvent("onmouseover",onMouseOverIdent); 
     document.attachEvent("onmouseout", onMouseOutIdent); 
    } 
} 

在我的onmousedown事件功能我試圖使用從怪異模式這一功能:

if (!e) var e = window.event; 
e.cancelBubble = true; 
if (e.stopPropagation) e.stopPropagation(); 

但是它仍然通過點擊該鏈接並加載它。我不知道是什麼可能導致它,任何幫助,將不勝感激。

更新: 我忘了提到的另一件事是我在頁面上的所有錨標記元素上這樣做。這似乎使得之後刪除這些聽衆更成問題。

回答

5

要使其不符合href,應該使用preventDefault而不是stopPropagation

對於IE,你會使用

e.returnValue = false; 

因此,它應該是這樣的......

if (!e) var e = window.event; 
e.returnValue = false; 
if (e.preventDefault) e.preventDefault(); 

這假設處理程序是直接鏈接,從而可以因爲你已經排除了相關的代碼,所以現在不知道。


還有一件事,您只能使用onmousedown事件。如果你想阻止的行爲或禁用實際click事件的冒泡,你應該做的......

document.addEventListener("click", ... 
document.attachEvent("onclick", ... 

另外注意,addEventListener應該"on"作爲事件名稱的一部分。

+0

所以這很有趣。我在我的onmousedown事件中嘗試了這一點,但它不起作用,但在錨標籤上分別創建了一個新的即使監聽器,似乎也能正常工作。爲什麼它必須專門在鏈接上? e.returnValue是否可以防止傳播過程中出現冒泡現象? – crtjer 2012-07-22 20:34:32

+0

@crtjer:我不得不作出一些假設,因爲你沒有在你的問題中包含相關的代碼。我認爲處理程序在''元素上。還有其他問題,所以我更新了我的答案。 – 2012-07-22 20:36:49

相關問題