基本的问题,但我一直在敲打我的头,所以想到id把它带到这里.
html看起来像这样(编辑,修复收尾报价)
<span class='deleteimage-119'>delete</span>
<span class='deleteimage-120'>delete</span>
<span class='deleteimage-121'>delete</span>
<span class='deleteimage-122'>delete</span>
<span class='deleteimage-123'>delete</span>
Run Code Online (Sandbox Code Playgroud)
javascript/jquery看起来像这样
iids = ['119','120','121','122','123'];
for (i=0; i<iids.length; i++) {
place = iids[i];
$(".deleteimage-" + place).click(function () {
alert(place);
});
}
Run Code Online (Sandbox Code Playgroud)
点击功能会附加到每个单独的范围,但单击后的警报会显示数组中的最后一项.
你有一个范围问题.当回调触发时,place具有循环中的最后一个值.
您需要为闭包创建一个新变量; 每次迭代一个变量,然后每个变量将由闭包"捕获"并在回调中使用.
如果解决方案是这样的话会很好:
var iids = ['119','120','121','122','123']; // don't forget `var` please
for (var i=0; i<iids.length; i++) {
var place = iids[i]; // local variable?
$(".deleteimage-" + place).click(function () {
alert(place);
});
}
Run Code Online (Sandbox Code Playgroud)
唉,Javascript没有块范围,因此这里仍然只有一个变量被调用place,并且随着循环运行它会不断更新.
所以,你必须使用一个函数:
var iids = ['119','120','121','122','123'];
function f(place) {
// NOW `place` is a local variable.
$(".deleteimage-" + place).click(function () {
alert(place);
});
}
for (var i=0; i<iids.length; i++) {
f(iids[i]);
}
Run Code Online (Sandbox Code Playgroud)
有更简洁的方法来使用闭包和绑定变量来使用这种函数方法,其他答案很好地涵盖了那些更简洁的方法.我的回答集中在解释这个问题上.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |