我在这部分遇到了麻烦:
var ex = {
exampl: function(){
var ref=window.event.target||window.event.srcElement; // here
alert(ref.innerHTML); // (example)
}
}
这个函数以这种方式调用:
document.body.childNodes[0].addEventListener('mouseover',ex.exampl,true);
只有Firefox说window.event
未定义...
我不知道该怎么做,让它发挥作用。它在webkit浏览器和opera中运行得很好(我无法在MSIE中检查它,我也不关心它。)
为什么会这样?
答案 0 :(得分:22)
尝试使用传递的参数获取事件(在本例中名为e
)。我对此进行了测试,Chrome中支持window.event
和e
。
try checking for both, whichever exists
var ex = {
exampl: function(e){
console.log(window.event);
console.log(e);
//check if we have "e" or "window.event" and use them as "evt"
var evt = e || window.event
}
}
答案 1 :(得分:16)
window.event
不是一个功能,它是一个错误!
引用MDN:
window.event
是Microsoft Internet Explorer的专有属性,仅在调用DOM事件处理程序时可用。它的值是当前正在处理的Event对象。
最重要的是:
不属于任何规范。
window.event
是非标准的,因此不要指望任何浏览器支持它。
element.addEventListener()
中回调函数的第一个参数是Event
个对象。使用它而不是window.event
。
答案 2 :(得分:15)
因为Firefox中不存在window.event
。那是因为浏览器有不同的事件模型,你必须处理他们的差异或使用像jQuery这样的库,不必处理浏览器之间的所有差异。欢迎来到DOM。
答案 3 :(得分:5)
Chrome本身也没有它。 IE没有将每个事件触发器传递给自己的事件对象,而是将属性丢弃到window.event中并将其移交。这是有效的,因为你一次只处理一个事件。每个浏览器应该具有的是window.Event,它是事件对象的实际构造函数。如果您在IE8及以下的任何地方看到'window.event',请尝试在空白选项卡上打开控制台并在那里记录或提醒它。有可能是在您正在查看的页面上手动添加它。
如果你看一下事件处理程序的crossbrowser规范化代码,你会经常看到:
if(!e){ e = window.event; }
这是规范处理旧版IE的代码的事件。在现代浏览器中,e应该是通过参数传递的对象,而不是对window属性的引用。
答案 4 :(得分:0)
window.event
将在Firefox from version 63上可用(预计于2018年10月下旬发布)。
答案 5 :(得分:0)