首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >情商:()不能正常工作

情商:()不能正常工作
EN

Stack Overflow用户
提问于 2015-11-16 15:44:38
回答 2查看 37关注 0票数 0

我有个密码:

代码语言:javascript
复制
        $("#button").click(function () {
            for (var i = 0; i < 4; i++) {
                setTimeout(function () {
                    $(".rows:eq("+i+")").css("background-color", "blue");
                },500);
            }
        });

由于某些原因,只有第五个元素得到背景颜色灰色。怎么啦?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-16 15:48:15

这与i变量的作用域有关。它绑定到for循环,而不是绑定到setTimeout调用的函数。基本上,当调用延迟函数时,i已经增加到4。为了绑定i的当前循环值,调用另一个函数。i被放置在函数堆栈上,因此,如果保留的话,值就会被保存。

这取决于您想要的是哪种行为,但是如果您想一次更改所有元素的css,@Josh的注释是最好的。

代码语言:javascript
复制
$("#button").click(function () {
   setTimeout(function (){
     for (var i = 0; i < 4; i++) {
       $(".rows:eq("+i+")").css("background-color", "blue");
     }
   ,500);
});

否则,试着:

代码语言:javascript
复制
bindItoFunc = function (i) {
  return function (){
    $(".rows:eq("+i+")").css("background-color", "blue");
  };
}
$("#button").click(function () {
  for (var i = 0; i < 4; i++) {
     setTimeout(bindItoFunc(i),500);
   }
});

也许更优雅的解决方案是将i绑定为函数的this值。

代码语言:javascript
复制
bindItoFunc = function () {
  $(".rows:eq("+this+")").css("background-color", "blue");
}
$("#button").click(function () {
  for (var i = 0; i < 4; i++) {
     setTimeout(bindItoFunc.bind(i),500);
   }
});

提问者指出,背景应按顺序变化。在这种情况下,根据i更改等待服务器。

代码语言:javascript
复制
bindItoFunc = function () {
  $(".rows:eq("+this+")").css("background-color", "blue");
}
$("#button").click(function () {
  for (var i = 0; i < 4; i++) {
     setTimeout(bindItoFunc.bind(i),500+(100*i));
   }
});
票数 2
EN

Stack Overflow用户

发布于 2015-11-16 16:08:36

尝试使用.delay().queue(),递归调用以增量的.index() of .row作为参数的click处理程序,在最初将.eq()设置为event.data0之后

代码语言:javascript
复制
// `0` : `event.data`
$("#button").click(0, function re(event) {
  var i = typeof event.data === "number" ? event.data : event;
  $(".row").eq(i).delay(500).queue(function() {
    $(this).css("background-color", "blue");
    if ($(this).index(".row") < 3) {
      re(i + 1)
    }
  })
})
代码语言:javascript
复制
.row {
  color:orange;
  width:36px;
  padding:8px;
  font-weight:bold;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<button id="button">click</button>
<span class="row">0</span>
<span class="row">1</span>
<span class="row">2</span>
<span class="row">3</span>
<span class="row">4</span>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33739245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档