<div oncontextmenu="asdf(event)">
<script type="text/javascript">
function asdf(event){
if (event.ctrlKey)
alert('foo');
}
</script>
为什么这样工作的:里面由一个事件处理程序创建的匿名函数属性字符串,则初始化为指向一个局部变量event
事件实例IE有一个坏的事件模型,但是这个代码仍然工作现在使用event
指的不是局部变量,而是全局的window.event
。
但是现在您通常会希望避免事件处理程序属性。最好从脚本本身,例如:
<div id="thing">
<script type="text/javascript">
document.getElementById('thing').oncontextmenu= function(event) {
if (event===undefined) event= window.event; // fix for IE
if (event.ctrlKey)
alert('foo');
};
</script>
把它在脚本分配事件处理程序也意味着你的HTML保持可验证。 (oncontextmenu
是一个IE浏览器扩展,将不会被标准化到HTML5。)
您也可以迁移相同功能addEventListener
,但请注意,所以你需要嗅探的addEventListener
存在IE不支持它,如果缺少使用IE特定的attachEvent
代替。如果同一个对象上的同一个事件不需要多个处理程序,那么只需使用旧式onevent
类型的处理程序就可以更容易(并且与古代浏览器更兼容)。
请注意,contextmenu
是一个不可靠的事件。它在所有浏览器中都不受支持,可能会被禁用,或者可能始终显示浏览器的真实上下文菜单,在Mac上,常见的方法是使用按住Control键单击,这可能会混淆您的支票ctrlKey
。另外当然还有无障碍问题。仅将Web应用程序中的上下文菜单用作快捷方式功能,而不是作为基本访问方法。
woohoo! addEventListener工作;谢谢。以供将来参考,这里是允许我捕获该事件的解决方案: \t功能负载(){ \t \t变种EL =的document.getElementById( “ITEM_2”); \t \t el.addEventListener(“contextmenu”,asdf,false); \t} \t
– unsorted 2010-01-03 10:36:10事件监听器属性中的arguments [0]是事件对象。 – 2010-01-03 15:14:27