gpt4 book ai didi

javascript - 调用 oncontextmenu 时 Firefox 浏览器的事件未定义

转载 作者:行者123 更新时间:2023-11-28 20:32:40 24 4
gpt4 key购买 nike

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

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”和未定义。看到这里事件未定义,我真的很困惑。

我正在使用该事件获取 x 和 y 坐标,以便在正确的位置显示上下文菜单。由于事件未定义,我无法继续进行。

最佳答案

之所以能在chrome和IE的控制台看到event,是因为IE一直有将事件对象赋值给全局引用的坏习惯(window .事件)。
Chrome 已正确实现 W3C 模型,并按照您的预期将事件对象传递给处理程序,但准备好对该事件对象的全局引用,以防万一。

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

由于 event 参数未定义,我只能假设 event 要么被忽略(被视为保留关键字,但只是悄悄地),要么有一些正在进行的幕后范围扫描将本地事件解析为全局[window.]事件

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

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

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

关于javascript - 调用 oncontextmenu 时 Firefox 浏览器的事件未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16044100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com