Javascript 本机JSmake调用addeventlistener一次以附加多个函数
我正在使用Javascript 本机JSmake调用addeventlistener一次以附加多个函数,javascript,Javascript,我正在使用addEventListener在名为addEventHandler的函数中为IE向脚本中的元素添加事件,并返回到attachEvent 每次我调用addEventHandler函数时,它都会调用addEventListener,这会降低性能,甚至使jQuery比我的普通JS更快 有没有办法一次调用addEventListener?当前我的代码如下所示: addEventHandler = function (oTarget, sEventType, fnHandler) {
addEventListener
在名为addEventHandler
的函数中为IE向脚本中的元素添加事件,并返回到attachEvent
每次我调用addEventHandler
函数时,它都会调用addEventListener
,这会降低性能,甚至使jQuery比我的普通JS更快
有没有办法一次调用addEventListener
?当前我的代码如下所示:
addEventHandler = function (oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent(“on” + sEventType, fnHandler);
} else {
oTarget[“on” + sEventType] = fnHandler;
}
};
您可以计算一次,而不是每次迭代,因为在运行时,对实现的支持或缺乏支持不会改变:
if (document.addEventListener) {
addEventHandler = function (oTarget, sEventType, fnHandler) {
oTarget.addEventListener(sEventType, fnHandler, false);
};
} else if (document.attachEvent) {
addEventHandler = function (oTarget, sEventType, fnHandler) {
oTarget.attachEvent(“on” + sEventType, fnHandler);
};
} else {
addEventHandler = function (oTarget, sEventType, fnHandler) {
oTarget[“on” + sEventType] = fnHandler;
};
}
你打了多少次电话给addEventHandler,说这会有所不同?我觉得你在做别的错事。这个简单的函数不应该导致任何实质性的开销。您知道10000次用于比较,我想知道jquery是如何做到这一点的(一个也使用addeventlistener的函数),这样您就不会有实际的性能问题。只是理论上的。是的,jQuery只绑定一个通用侦听器,并将实际侦听器放在
jQuery.cache
中。这可能会在绑定时提供一点改进,但在实际调用事件时会有更多开销……我感觉您的测试在某些方面存在缺陷。您是否将处理程序绑定到同一元素100000次?如果是这样,那么这将是一个问题,因为.addEventListener
保证了其处理程序的唯一性,但jQuery没有做到这一点。您真的没有抓住要点,不是吗。@user1559763这将函数选择移到初始化(一次)而不是每次调用。我看不出这怎么解决不了你的问题-你介意详细说明吗?@user1559763等等,你想授权吗?类似于“事件”、“选择器”上的
?我的问题是防止调用addeventlistener作为jquerydo@user1559763您可以将函数推送到一个数组,然后在for循环中调用该数组。例如,我真的没有看到用例。感谢您的建议,用例是假设我明天创建一个框架,有人在我测试t时开始测试它今天,如果被jquery打败,那么我的框架将在打开之前关闭;)