这是一个非常基本的问题,但...如何在声明时在JavaScript匿名函数中使用变量的值?
我有这样
var arr = Array('blah.jpg','ha.jpg');
for (var i=0; i<array.length; i++)
{
$('div#blah' + i).click(function() {
$('img').attr('src', arr[i]); });
}
这部分代码应该在div绑定id="blah0"
点击,当所有的图像切换到'blah.jpg'
。 同样,单击id ="blah1"
的div应该将所有图像更改为'ha.jpg'
。
但是,匿名函数将不起作用,因为它会在执行时使用'i'的值,即2。这意味着单击任一div将试图将所有图像设置为arr [2] - 一个不存在的元素(有趣的是不会在我的机器上抛出JS错误,但这是另一回事......)。
如何在声明时使用'i'的值创建匿名函数?
作为简单的例子:
for (var i=0; i<10; i++)
{
$('div#blah'+i).click(function() {
alert(i)); });
}
这应该显示 '0',当我点击 'blah0', '1',当我点击 'blah1' 等
但是,默认它将显示'10',无论我点击'blah'。
问题不是绑定(即'div#blah'+ j),而是数组访问(即arr [i])。在你使用的方法中,根本不会有任何区别 - 点击仍然会调用arr的'i'元素,使用当时的i值(例如array.length)而不是我创建时的值函数 – 2008-11-21 03:57:01
虽然我不太了解闭包,但可以让点击调用单个函数并检查Event.Src(它会给你div1,div2或div3),从中提取id并根据它设置图像源。 – shahkalpesh 2008-11-21 04:13:06
我还没有试过这个。但是新函数(){...}可能吗? – shahkalpesh 2008-11-21 04:14:06