在调用oncontextmenu时,firefox浏览器的事件未定义

时间:2013-04-16 18:09:07

标签: javascript firefox contextmenu

我在右键单击页面中的按钮时显示上下文菜单。用于显示上下文菜单的代码是

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坐标以在正确的位置显示上下文菜单。由于事件未定义,因此无法继续进行。

1 个答案:

答案 0 :(得分:3)

你可以在chrome和IE控制台中看到event显示的原因是IE总是把事件对象分配给全局引用(window.event)。
Chrome已正确实现了W3C模型,并按预期将事件对象传递给处理程序,但保留对该事件对象的全局引用,以防万一。

尝试记录obj,它会在FF中记录事件对象......我对此非常有信心。 Chrome的行为方式也完全相同:事件对象将传递给处理程序。

由于event参数未定义,我只能假设event被忽略(被视为保留关键字,但只是静静地),或者有一些幕后范围-scanning继续将本地 event解析为全局 [window.]event

无论如何,使用可能是关键字的varnames,或者已经存在的varnames(如documentwindowthis)是不允许或不赞成的。这就是为什么你经常会看到这个:

function eventHandler (e)
{
    e = e || event;
}
允许

e作为varname,并且没有名称冲突,除非我们自己创建一个。如果处理程序没有收到事件对象,我们引用event,由于范围扫描,它将被解析为window.event