Javascript jQuery:将setInterval分配给数组时出现问题

Javascript jQuery:将setInterval分配给数组时出现问题,javascript,jquery,html,jquery-selectors,Javascript,Jquery,Html,Jquery Selectors,我试图在一个页面上运行多个动画(各种各样的幻灯片),但代码仅适用于实际出现的3个幻灯片中的一个 问题不在于动画,而在于函数的实际初始化和运行(下面通过查看代码更好地解释): HTML: <div class="someclass1" rel="slideshow" type="fade" duration=8500> <div class="wrapper">...</div> <div class="wrapper">...</di

我试图在一个页面上运行多个动画(各种各样的幻灯片),但代码仅适用于实际出现的3个幻灯片中的一个

问题不在于动画,而在于函数的实际初始化和运行(下面通过查看代码更好地解释):

HTML:

<div class="someclass1" rel="slideshow" type="fade" duration=8500>
  <div class="wrapper">...</div>
  <div class="wrapper">...</div>
</div>
<div class="someclass2" rel="slideshow" type="slide" duration=4000>
  <div class="wrapper">...</div>
  <div class="wrapper">...</div>
</div>
<div class="someclass3" rel="slideshow" type="fade" duration=5000>
  <div class="wrapper">...</div>
  <div class="wrapper">...</div>
</div>
但是,此函数将仅使用最后找到的目标(即t='.someClass3')运行。即使通过在setInterval函数中放置console.log警报,我知道它正在应用正确的变量

e、 g

然而,正如我试图(糟糕地)解释的那样,如果我在fadeSwitch中放置一个console.log,以测试它运行时作为目标传递的内容(请记住,它被设置为在间隔后运行,因此当.someClass1函数第一次运行时,plays[]数组已满且已完成)日志显示目标始终为.someClass3,并且除了上次输入的目标之外,它不会成功运行任何其他目标

非常感谢您的任何建议或帮助。
多谢各位

调用
setInterval
时,
t
的值被匿名函数“关闭”。对于循环的每次迭代,您都会创建一个新的匿名函数,正如您所说,此时
t
具有正确的值

问题是,当每个函数执行
t
时,其值已经改变(它将保存循环的最后一个值),并且所有三个匿名函数都引用相同的t变量(这是闭包的性质和javascript的词法范围)。快速修复方法是为每个匿名函数提供正确的值,而不是对t的引用:

更改此项:

plays[x] = setInterval(function(){fadeSwitch(t);}, duration);
为此:

plays[x] = setInterval((function(t2){ return function(){ fadeSwitch(t2); }; })(t), duration);
显然,使用
滑动开关的同一行也是如此


我觉得应该指出的是:在HTML中使用了无效的属性,考虑找到一个替代方案,如隐藏的嵌入标记(例如<代码> 5000代码>代码>)或类名称,或者HTML5数据属性,而不是<代码> <代码>

< p>“代码> t<代码>的值正在被“关闭”。在调用
setInterval
时使用匿名函数。对于循环的每次迭代,您都会创建一个新的匿名函数,正如您所说,此时
t
具有正确的值

问题是,当每个函数执行
t
时,其值已经改变(它将保存循环的最后一个值),并且所有三个匿名函数都引用相同的t变量(这是闭包的性质和javascript的词法范围)。快速修复方法是为每个匿名函数提供正确的值,而不是对t的引用:

更改此项:

plays[x] = setInterval(function(){fadeSwitch(t);}, duration);
为此:

plays[x] = setInterval((function(t2){ return function(){ fadeSwitch(t2); }; })(t), duration);
显然,使用
滑动开关的同一行也是如此

我觉得我应该指出的是:在HTML中使用了无效的属性,考虑找到一个替代方案,比如隐藏的嵌入标记(例如<代码> 5000代码> >),或者类名,或者HTML5数据属性,而不是<代码> <代码> < /P>

plays[x] = setInterval((function(t2){ return function(){ fadeSwitch(t2); }; })(t), duration);