Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用oncontextmenu时未定义firefox浏览器的事件_Javascript_Firefox_Contextmenu - Fatal编程技术网

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

Javascript 调用oncontextmenu时未定义firefox浏览器的事件,javascript,firefox,contextmenu,Javascript,Firefox,Contextmenu,我在页面中右键单击按钮时显示上下文菜单。用于显示上下文菜单的代码为 window.addEventListener('contextmenu',function (e){e.preventDefault();},false);} 当我右键单击按钮时,上下文菜单方法名为 displaycontextmenu(obj,event) { console.log("Context"); console.log(event); // Displaying contex

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

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

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

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

由于未定义
事件
参数,因此我只能假设
事件
要么被忽略(被视为保留关键字,但只是安静地),要么正在进行一些后台范围扫描,将本地
事件
解析为全局
[窗口]事件

无论如何,使用可能是关键字或已经存在的变量名(如
文档
窗口
)是不允许或不赞成的。这就是为什么你会经常看到:

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

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

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

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

由于未定义
事件
参数,因此我只能假设
事件
要么被忽略(被视为保留关键字,但只是安静地),要么正在进行一些后台范围扫描,将本地
事件
解析为全局
[窗口]事件

无论如何,使用可能是关键字或已经存在的变量名(如
文档
窗口
)是不允许或不赞成的。这就是为什么你会经常看到:

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

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

displaycontextmenu(事件)
处理程序附加到窗口的contextmenu事件侦听器的位置?将
displaycontextmenu(事件)
处理程序附加到窗口的contextmenu事件侦听器的位置?