我的for循环内部的处理程序可能超出范围,只在控制台中打印“Last Event added”但不循环遍历数组中的每个元素。不确定我在哪里出错,但我需要帮助将事件监听器附加到每个。
(function () {
if (document.addEventListener) {
this.addEvent = function (elem, type, fn) {
elem.addEventListener(type, fn, false);
};
} else if (document.attachEvent) {
this.addEvent = function (elem, type, fn) {
var bound = function () {
return fn.apply(elem, arguments);
};
elem.attachEvent("on" + type, bound);
return bound;
};
}
if (document.getElementsByClassName) {
this.getClass = function (className) {
return document.getElementsByClassName(className);
};
} else if (document.querySelectorAll) {
this.getClass = function (className) {
return document.querySelectorAll("." + className);
};
}
var elem = getClass("images"),
display = getClass("display_box"),
rolloverImage = function (e) {
console.log("Event 'rolloverImage' triggered");
};
console.log(display);
console.log(elem);
console.log(elem.length);
for (var i = 0; i < elem.length; i++) {
document.addEvent(elem[i], "mouseover", rolloverImage);
if (i = elem.length) {
console.log("Last event added");
} else {
console.log("Event added to " + elem[i]);
}
};
})();
答案 0 :(得分:1)
如果您希望addEvent
函数位于文档对象上,请使用document.addEvent =
而不是this.addEvent =
,因为这会将其置于全局对象window
它也不会遍历所有这些因为你将i
分配给elem
数组长度而不是比较。
if (i = elem.length) {
应该是
if (i == elem.length) {
因为在循环的第一次迭代中,i
的值为elem.length
,因此i
现在不是< elem.length
,所以循环退出。
答案 1 :(得分:1)
一个问题是,在for
循环中,if (i = elem.length)
将始终为真,因为您使用的是单个作业=
,并且更改了i
的值。这需要更改为if (i == elem.length)
,或者您可能更喜欢使用===
。