将单个事件附加到存储在数组中的多个元素,本机JS

时间:2011-10-13 10:19:46

标签: javascript javascript-events

一个完整新手的问题,是的,但我无法在任何地方找到答案。或者我的英语可能不足以给Google提出正确的要求。每个人都在建议一些框架,但我想知道如何在原生JavaScript中完成它。我已经尝试过这个代码和其他一些东西,没有效果。似乎我没有意识到一些基本的基本概念。任何帮助将不胜感激。

window.onload = function() {
    var trCurrent
    var main = document.getElementById('main');
    var tr = main.getElementsByTagName('tr');
    function hl() {
            trCurrent.setAttribute('class', 'highlight');
    };
    for (var x = 0; x < tr.lenght; x++) { 
        trCurrent = tr[x];
        trCurrent.addEventListener ('mousedown', hl, false);
    }
};

1 个答案:

答案 0 :(得分:1)

  • 您必须在trCurrentthis更改为function h1,因为trCurrent指向最后定义的TR元素(trCurrent = tr[x]为高x 1}})。
  • 使用.length代替.lenght

最终代码:

window.onload = function() {
    var main = document.getElementById('main');
    var tr = main.getElementsByTagName('tr');
    function hl() {
        this.setAttribute('class', 'highlight');
    };
    for (var x = 0; x < tr.length; x++) { 
        tr[x].addEventListener ('mousedown', hl, false);
    }
};

如果要使用在循环期间可能发生变化的变量,则需要将主体包装在(匿名)函数中:

window.onload = function() {
    var main = document.getElementById('main');
    var tr = main.getElementsByTagName('tr');
    for (var x = 0; x < tr.length; x++) {

        (function(trCurrent){ //Anonymous wrapper, first argument: `trCurrent`
            function hl() {
                trCurrent.setAttribute('class', 'highlight');
            };
            trCurrent.addEventListener ('mousedown', hl, false);
        })(tr[x]); //Passing a reference to `tr[x]`
    }
};