2011-08-07 165 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/ –

相关问题