This question already has answers here:
JavaScript closure inside loops – simple practical example
(44个回答)
5年前关闭。
我使用此循环将悬停dif添加到可变数量的按钮中。
当我使用此代码时,每个jQuery元素都会获得“'#difdiv'+ i”。最后,每个按钮都会淡入和淡出相同的difdiv。在这种情况下,difdiv3。
我该如何访问将值赋予jQuery元素而不是变量?
(44个回答)
5年前关闭。
for (var i = 1; i <= 3; i++)
{
var tmpDiv = '#difdiv' + i;
var tmpButton = '#difButton' + i;
$(tmpDiv).css({
position: "absolute",
left: 0,
top: $('#map').position().top - 16
});
$(tmpDiv).css('z-index', 3000);
$(tmpDiv).css('width', '100%');
$(tmpButton).hover(
function () {
$(tmpDiv).fadeIn(200);
}, function () {
$(tmpDiv).fadeOut(200);
}
);
}
我使用此循环将悬停dif添加到可变数量的按钮中。
当我使用此代码时,每个jQuery元素都会获得“'#difdiv'+ i”。最后,每个按钮都会淡入和淡出相同的difdiv。在这种情况下,difdiv3。
我该如何访问将值赋予jQuery元素而不是变量?
最佳答案
问题是变量引用。解决它的简单方法是将循环内的内容填充到函数中并调用它。
function createButton(i) {
var tmpDiv = '#difdiv' + i;
var tmpButton = '#difButton' + i;
$(tmpDiv).css({
position: "absolute",
left: 0,
top: $('#map').position().top - 16
});
$(tmpDiv).css('z-index', 3000);
$(tmpDiv).css('width', '100%');
$(tmpButton).hover(
function () {
$(tmpDiv).stop().fadeIn(200); //added stop
}, function () {
$(tmpDiv).stop().fadeOut(200); //added stop
}
);
}
for (var i = 1; i <= 3; i++) {
createButton(i);
}
09-18 07:33