gpt4 book ai didi

javascript - addEvent 给出空事件对象

转载 作者:行者123 更新时间:2023-11-30 18:21:38 24 4
gpt4 key购买 nike

我正在尝试在我的项目中获得 IE8 支持,但很难将 addEventListener 转换为 addEvent(来自:http://ejohn.org/projects/flexible-javascript-events/)

因此,使用他的代码,我有一个类似 ( source here) 的事件设置:

_addEvent(eventableIframes[i], 'mousemove', function (e) {
utilBarHandler(e);
});

但是,当到达 utilBarHandler 时,“e”为 null 并且 IE8 给我一个“需要对象”错误 here on line 783 .我假设所需的对象是事件对象,因为当我在 top of the function 处注销 e 时,它实际上只是 null .

此外,对于该循环中需要事件对象(例如 shortcutHandlershortcutUpHandler 的每个事件都会发生这种情况。

更新:以防万一人们错过它,这篇文章有一堆突出显示特定行的链接。

最佳答案

并非所有版本的 IE 都将事件作为参数传递。它在 window.event 中。您可以将其添加到您的 _addEvent shim 或您的事件处理程序中:

 e = e || window.event

如:

_addEvent(eventableIframes[i], 'mousemove', function (e) {
e = e || window.event;
utilBarHandler(e);
});

它将在 IE 或其他浏览器中工作。

这里有两种跨浏览器事件处理方式,可确保在 IE 中正确设置 eventthis 指针:

// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
return(fn.call(elem, window.event));
});
}
}


// refined add event cross browser
function addEvent(elem, event, fn) {
// avoid memory overhead of new anonymous functions for every event handler that's installed
// by using local functions
function listenHandler(e) {
var ret = fn.apply(this, arguments);
if (ret === false) {
e.stopPropagation();
e.preventDefault();
}
return(ret);
}

function attachHandler() {
// set the this pointer same as addEventListener when fn is called
// and make sure the event is passed to the fn also so that works the same too
var ret = fn.call(elem, window.event);
if (ret === false) {
window.event.returnValue = false;
window.event.cancelBubble = true;
}
return(ret);
}

if (elem.addEventListener) {
elem.addEventListener(event, listenHandler, false);
} else {
elem.attachEvent("on" + event, attachHandler);
}
}

关于javascript - addEvent 给出空事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920063/

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