Javascript通过for循环分配事件处理程序 [英] Javascript assigning event handlers via for loop

查看:87
本文介绍了Javascript通过for循环分配事件处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我出现一些noobish的事件,不幸的是,不幸的是,以下几点对我来说是不行的:

  var someDomRef = document.getElementByRef(refVal); 
for(i = 0; i< someDomRef.length; i ++){//或someDomRef.childNodes.length / someDomRef.TagRef.length
someDomRef.onmouseup = function(){
someDomRef .childNodes [i] .onmouseover = function(){
if(someRef.onmouseup){
//为此onMouseover处理程序返回false(someDomRef.childNodes [i])
}
};
};
}

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

解决方案

当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){
// r对于这个的onmouseover处理程序(someDomRef.childNodes [i])
}
};
};
})(i);
}

您可能需要在onmouseup函数中另外关闭


Apologies if I appear a little "noobish" with events, but for whatever reason the following doesn't work for me:

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

Each time I release the mouse button after holding it upon someDomRef, I find a "onmouseover could not be assigned to undefined object" error in the JS console. Any help would be greatly appreciated for solving this problem (note: I know that I can assign another event handler outside of the onmouseover function to itself on the condition of someDomRef.onmouseup, but I'd like to know of a way to achieve this from within that onmouseover itself (I've also tried assigning var x = someDomRef.childNodes[i] and passing it through as an argument to the conditional clause for someRef.onmouseup, but this doesn't work either (albeit it doesn't return an error for this attempt)).

解决方案

i is undefined when mouseup is called. You need to close over this with some closure functions:

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);
}

You may need another closure inside of the onmouseup function

这篇关于Javascript通过for循环分配事件处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆