事件处理函数超出范围

时间:2014-06-28 02:58:54

标签: javascript javascript-events mouseevent onmouseover

我的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]);
        }
    };
})();

2 个答案:

答案 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),或者您可能更喜欢使用===

相关问题