假設我需要寫一個onclick處理器在屬性,就像這樣:有沒有辦法在onclick屬性中訪問JavaScript事件?
<a href='#' onclick='DoSomething(); event.stopPropagation(); return false;'>
...</a>
我知道這是不好的形式,但假設爲,我必須使用屬性的時刻。
不幸的是event
沒有定義。我試過e
,那也沒有定義。有什麼方法可以訪問屬性中的事件對象,或者任何其他方式來停止事件傳播?
假設我需要寫一個onclick處理器在屬性,就像這樣:有沒有辦法在onclick屬性中訪問JavaScript事件?
<a href='#' onclick='DoSomething(); event.stopPropagation(); return false;'>
...</a>
我知道這是不好的形式,但假設爲,我必須使用屬性的時刻。
不幸的是event
沒有定義。我試過e
,那也沒有定義。有什麼方法可以訪問屬性中的事件對象,或者任何其他方式來停止事件傳播?
你在哪裏得到的事件對象取決於瀏覽器。一些(所有?)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)
,所以你沒有通常「#
解釋爲頁內片段」問題。
請使用'var event = ...'。 – pimvdb
@pimvdb:爲什麼?將它放在函數的參數列表中足以避免意外的全局。 –
我相信你需要將它傳遞到函數本身,就像這樣:
<a href='#' onclick='DoSomething(event); return false;'>...</a>
function DoSomething(event){
event.stopPropagation();
}
這沒有任何意義。你從哪裏得到「事件」參考?如果你有它,爲什麼你不能直接在'onclick'屬性中使用它? –
哇,這真的有效。對不起早先downvote,我做錯了... – Timwi
@Samir:我希望我可以downvote評論,你沒有任何意義。嘗試在非IE瀏覽器中:http://jsfiddle.net/ambiguous/KSnmP/ –
適合我。你正在使用哪種瀏覽器? –
此JSFiddle僅在Google Chrome(Mac,13.0.782.107)上顯示一個警告框:http://jsfiddle.net/xfZvK/ –