我在右键单击页面中的按钮时显示上下文菜单。用于显示上下文菜单的代码是
window.addEventListener('contextmenu',function (e){e.preventDefault();},false);}
当我右键单击该按钮时,调用的上下文菜单方法是
displaycontextmenu(obj,event)
{
console.log("Context");
console.log(event);
// Displaying context menu
}
代码在IE浏览器中运行良好,即使在Chrome中我也可以在控制台中看到" 上下文"并打印事件。但是在Firefox中,它打印为" 上下文"和未定义。 我真的很困惑,看到这个事件是未定义的。
我正在使用该事件来获取x和y坐标以在正确的位置显示上下文菜单。由于事件未定义,因此无法继续进行。
答案 0 :(得分:3)
你可以在chrome和IE控制台中看到event
显示的原因是IE总是把事件对象分配给全局引用(window.event
)。
Chrome已正确实现了W3C模型,并按预期将事件对象传递给处理程序,但还保留对该事件对象的全局引用,以防万一。
尝试记录obj
,它会在FF中记录事件对象......我对此非常有信心。 Chrome的行为方式也完全相同:事件对象将传递给处理程序。
由于event
参数未定义,我只能假设event
被忽略(被视为保留关键字,但只是静静地),或者有一些幕后范围-scanning继续将本地 event
解析为全局 [window.]event
。
无论如何,使用可能是关键字的varnames,或者已经存在的varnames(如document
,window
或this
)是不允许或不赞成的。这就是为什么你经常会看到这个:
function eventHandler (e)
{
e = e || event;
}
允许 e
作为varname,并且没有名称冲突,除非我们自己创建一个。如果处理程序没有收到事件对象,我们引用event
,由于范围扫描,它将被解析为window.event
。