假设我需要写一个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/ –