Javascript通过for循环分配事件处理程序

时间:2011-06-06 05:00:57

标签: javascript events dom

道歉,如果我对某些事件看起来有点“noobish”,但无论出于何种原因,以下内容对我都不起作用:

var someDomRef = document.getElementByRef("refVal");
for(i=0;i<someDomRef.length;i++) { //or someDomRef.childNodes.length/someDomRef.TagRef.length
 someDomRef.onmouseup = function() {
  someDomRef.childNodes[i].onmouseover=function() {
   if(someRef.onmouseup) {
    //return false for the onmouseover handler of this(someDomRef.childNodes[i])
   }
  };
 };
}

每次我在someDomRef上按下它后释放鼠标按钮,我发现JS控制台中的“onmouseover无法分配给未定义的对象”错误。任何帮助都将非常感谢解决这个问题(注意:我知道我可以在somemomover函数之外的其他事件处理程序,在someDomRef.onmouseup的条件下,但我想知道一种方法来实现这一点从那个onmouseover本身(我也尝试分配var x = someDomRef.childNodes [i]并将其作为参数传递给someRef.onmouseup的条件子句,但这也不起作用(尽管它不是为此尝试返回错误))。

1 个答案:

答案 0 :(得分:1)

调用mouseup时未定义。你需要通过一些闭包函数来关闭它:

var someDomRef = document.getElementByRef("refVal");
for(i=0;i<someval;i++) {
    (function(i) {
        someDomRef.onmouseup = function() {
            someDomRef.childNodes[i].onmouseover=function() {
                if(someRef.onmouseup) {
                    //return false for the onmouseover handler of this(someDomRef.childNodes[i])
                }
            };
        };
    })(i);
}

你可能需要onmouseup函数内的另一个闭包