好吧,简单......我想做到这一点(效果很好,但是当#b到#b20时显然太多了):
$("#b" + 1).click(function () {
$('.c').hide();
$(".a" + 1).show();
});
$("#b" + 2).click(function () {
$('.c').hide();
$(".a" + 1).show();
});
简单,像这样:
for (var i = 0; i < 50; i += 1) {
$("#b" + i).click(function () {
$('.c').hide();
$(".a" + i).show();
alert('Hey'+i);
});
}
$(&#34;#b&#34; + i)是htmlpage上的按钮, $(&#34; .a&#34; + i)是应该通过单击按钮在页面上查看的文本。 //所以文字是 class =&#34; c a1&#34; , class =&#34; c a2&#34; ,...;按钮是 id =&#34;#b1&#34; , id =&#34;#b2&#34; ... 但是当我执行代码时(点击#b1,#b2或......),。c隐藏(如预期的那样),下一步仅在i = 50时执行(通过警报证明)。
有什么想法吗?
答案 0 :(得分:0)
在for循环中尝试这个:
for (var i = 0; i < 50; i += 1) {
(function (j) {
$("#b" + j).click(function () {
$('.c').hide();
$(".a" + j).show();
alert('Hey'+j);
});
}(i))
}
实际上,这是一个经典之作,您应该阅读更多有关闭包的内容以及JS是一种“传递为价值”的语言。但是简单地说:
作为参数发送给function
函数的匿名click
引用了它所创建的环境,因此,它引用了i
变量,这是创建的每个function
都完全相同(每次迭代创建一个函数)。因此,每个匿名函数都将i
包含循环的最后一个值。
通过使用另一个闭包,你使用JS将参数作为值传递而不是作为引用的事实:j
(即使你称之为i
,正如我以前所说的那样)不是引用i
,而不是i
在传递给函数时的值。