相关疑难解决方法(0)

循环内的JavaScript闭包 - 简单实用的例子

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
Run Code Online (Sandbox Code Playgroud)

它输出这个:

我的价值:3
我的价值:3
我的价值:3

而我希望它输出:

我的价值:0
我的价值:1
我的价值:2


使用事件侦听器导致运行函数的延迟时,会出现同样的问题:

var buttons = document.getElementsByTagName("button");
// let's create 3 …
Run Code Online (Sandbox Code Playgroud)

javascript closures loops

2689
推荐指数
25
解决办法
34万
查看次数

jQuery循环和附加单击事件

好吧,我已经尝试了多种方法,并寻找答案,我似乎无法让它工作.我想要做的是有一些动态生成的图像,所以我不知道随时会有多少图像.每个图像都有一些相关的信息,我存储在一个单独的div中.我想要做的是将click事件附加到每个图像,该事件将取消隐藏其中包含相关内容的div.

我尝试使用for循环和while循环进行循环,但无济于事.两者都发生了什么,它们将点击事件附加在一起,但无论点击图像,同样的div总是打开,没有与图像相关联的div.

var cnt = jQuery('#container img').length;
   cnt = cnt - 1;
   var i = 0
   for(i=0; i<=cnt; i++) {
       jQuery('#container img').eq(i).click(function() {
           jQuery('.movie' + 1).slideDown();
           jQuery('#sort').hide();
       });
   }


while(i<=cnt) {
jQuery('#container img').eq(i).click(function() {
       jQuery('.movie' + i).slideDown();
       jQuery('#sort').hide();
    });
i++
Run Code Online (Sandbox Code Playgroud)

}

以上是我尝试过的两种不同的变化.第二个没有在这里定义的变量,但在我的代码中他们做了.我正在做的是计算我有多少图像(var cnt),然后使用它来循环正确的次数.我假设必须在点击功能中弄乱一些东西,因为它将它附加到每个图像中,但得到错误的div.

编辑:

根据一些评论,我尝试将我的结构更改为:

<div id="container">
  <img />
  <img />
  <div class="expanded">
     // Info Goes Here
  </div>
  <div class="expanded">
     // Info Goes Here
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后我尝试了代码:

jQuery(document).ready(function() {
   jQuery('#container img').click(function () {
       jQuery(this).next('div.expanded').show();
   });
});
Run Code Online (Sandbox Code Playgroud)

但它也不起作用.第一个图像什么都不做,第二个图像显示错误的div.

jquery loops for-loop while-loop

4
推荐指数
1
解决办法
4146
查看次数

标签 统计

loops ×2

closures ×1

for-loop ×1

javascript ×1

jquery ×1

while-loop ×1