我在右键单击页面中的按钮时显示上下文菜单。用于显示上下文菜单的代码是
window.addEventListener('contextmenu',function (e){e.preventDefault();},false);}
当我右键单击按钮时,调用的上下文菜单方法是
displaycontextmenu(obj,event)
{
console.log("Context");
console.log(event);
// Displaying context menu
}
该代码在 IE 浏览器中执行良好,即使在 chrome 中我也可以在控制台中看到“Context" 并且事件被打印。但在 Firefox 中,它打印为 "Context" and 不明确的。
看到这里事件未定义,我真的很困惑。
我正在使用该事件获取 x 和 y 坐标,以在正确的位置显示上下文菜单。由于事件未定义,我无法进一步进行。
你能看到的原因event
在chrome和IE的控制台中出现的一个问题是,IE一直有将事件对象分配给全局引用的坏习惯(window.event
).
Chrome 已经正确实现了 W3C 模型,并按照您的预期将事件对象传递给处理程序,但是also准备好对该事件对象的全局引用,以防万一。
尝试记录obj
,它将在 FF 中记录事件对象...我对此相当有信心。 Chrome 也会以完全相同的方式运行:事件对象将被传递给处理程序。
自从event
参数未定义,我只能假设event
要么被忽略(被视为保留关键字,但只是悄悄地),要么正在进行一些幕后范围扫描来解决local event
to the global [window.]event
.
无论如何,使用可能是关键字或已经存在的变量名(例如document
, window
or this
)要么是不允许的,要么是不被允许的。这就是为什么你会经常看到这样的情况:
function eventHandler (e)
{
e = e || event;
}
e
允许作为变量名,并且不存在名称冲突,除非我们自己创建一个。如果处理程序没有收到事件对象,我们引用event
由于范围扫描,将解决window.event
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)