for循环中setTimeout使用注意

声明:本博文用于学习总结及工作心得


使用Extjs前端框架时,需要改变框架中grid组件默认的样式;由于组件中嵌套有checkBox复选框,使用的是动态加载

所以在使用listener 监听afterrender时做动态修改组件样式,总是获取不到checkbox组件;然后改用setTimeout延迟方法的执行;

问题得以解决,但是如果该grid在当前哟多个时,通过样式选择器获取组件,得到的是一个dom数组,思路是使用for循环加setTimeout;

实际验证后确实得不到想要的结果,改变的始终是最后一个grid;

由于在setTimeout中的函数执行的时候,for循环已经完成了,获取的到checkBox组件始终是最后一个;如何让for

循环的值保留下来传递给setTimeout使用?

看下面两段代码:

              

for(var i=0;i<10;i++){
  setTimeout((function(i){
   return function(){
       console.log(i);
   }
  })(i),1000);
}

循环的10次都是在1s后触发,所以一次性打印出来;

for(var i=0;i<10;i++){
  setTimeout((function(i){
   return function(){
       console.log(i);
   }
  })(i),(function(i){
    return i*1000
  })(i));
}    

循环的10次每一次比前一次要延迟1s触发,所以打印效果是间隔1s。

以上两种循环方法都解决了for循环传值的问题;

业务代码:

   'afterrender': function (grid) {
            var elements = document.querySelectorAll('.panel_title_toolbar_daily3');
            for (var index = 0; index < elements.length; index++) {
                var nodes = elements[index].childNodes;
                console.info(nodes.length);
                if (nodes) {
                    nodes[0].setAttribute("style", "background:url('');background-color:#fff;");
                    var node = nodes[1];
                    nodes[1].setAttribute("style", "background:url('');background-color:#fff;border:0px;");
                    if (node) {
                        setTimeout((function(node){
                            return function(){
                                var childNode = node.firstChild.firstChild;
                                var childNodes = childNode.childNodes;
                                console.info(childNodes.length);
                                for (var i = 0; i < childNodes.length; i++) {
                                    if (i == 0) {
                                        childNodes[i].setAttribute("style", "background:url('');background-color:#fff;border:0px;");
                                    }
                                    childNodes[i].firstChild.setAttribute("style", "background:url('');background-color:#fff;border:0px;");
                                }
                            }
                        })(node),10);
                    }
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值