2011-08-07 96 views
1

假設我需要寫一個onclick處理器在屬性,就像這樣:有沒有辦法在onclick屬性中訪問JavaScript事件?

<a href='#' onclick='DoSomething(); event.stopPropagation(); return false;'> 
    ...</a> 

我知道這是不好的形式,但假設爲,我必須使用屬性的時刻。

不幸的是event沒有定義。我試過e,那也沒有定義。有什麼方法可以訪問屬性中的事件對象,或者任何其他方式來停止事件傳播?

+1

適合我。你正在使用哪種瀏覽器? –

+0

此JSFiddle僅在Google Chrome(Mac,13.0.782.107)上顯示一個警告框:http://jsfiddle.net/xfZvK/ –

回答

3

你在哪裏得到的事件對象取決於瀏覽器。一些(所有?)IE版本將它放在window.event中,但其他人都將其作爲參數傳遞給它。所以,你最終不得不做一個愚蠢的小舞這樣的:

function DoSomething(event) { 
    event = event || window.event; 
    event.stopPropagation(); 
    // Do useful work. 
    return false; 
} 

然後建立onclick這樣的:

<a href="javascript:void(0)" onclick="DoSomething(event)"> 

我也切換到javascript:void(0),所以你沒有通常「#解釋爲頁內片段」問題。

+0

請使用'var event = ...'。 – pimvdb

+0

@pimvdb:爲什麼?將它放在函數的參數列表中足以避免意外的全局。 –

-1

根據瀏覽器的不同,event的創建和處理方式不同。

IE在點擊發生時創建全局事件對象。 FF不會創建全局對象event但將其作爲第一個參數傳遞給該函數。

但在你的情況下,只是說return false將取消鏈接操作(如果這是你打算做的)。

<a href='#' onclick='DoSomething(); return false;'> ...</a> 
+0

'window.event is undefined.' – Timwi

+0

@Timwi:您使用的瀏覽器是什麼?在IE9 – Mrchief

+0

@Timwi中沒有定義,編輯了我的答案。 – Mrchief

1

我相信你需要將它傳遞到函數本身,就像這樣:

<a href='#' onclick='DoSomething(event); return false;'>...</a> 

function DoSomething(event){ 
    event.stopPropagation(); 
} 
+0

這沒有任何意義。你從哪裏得到「事件」參考?如果你有它,爲什麼你不能直接在'onclick'屬性中使用它? –

+0

哇,這真的有效。對不起早先downvote,我做錯了... – Timwi

+0

@Samir:我希望我可以downvote評論,你沒有任何意義。嘗試在非IE瀏覽器中:http://jsfiddle.net/ambiguous/KSnmP/ –

相關問題