TV'*_*ank 7 javascript scope function
关于stackoverflow的第一个问题:)希望我不会让自己难堪......
我有一个javascript函数,可以加载一个专辑列表,然后为每个专辑创建一个列表项.列表项应该是可点击的,所以我用一个做东西的函数调用jQuery的click().我循环这样做.我的问题是,所有项目似乎都获得相同的点击功能,即使我尝试创建一个在每次迭代中执行不同内容的新项目.另一种可能性是迭代变量以某种方式是全局的,并且函数引用它.代码如下.debug()只是Firebug的console.debug()的封装.
function processAlbumList(data, c) {
for (var album in data) {
var newAlbum = $('<li class="albumLoader">' + data[album].title + '</li>').clone();
var clickAlbum = function() {
debug("contents: " + album);
};
debug("Album: " + album + "/" + data[album].title);
$('.albumlist').append(newAlbum);
$(newAlbum).click(clickAlbum);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是上述函数运行时打印内容的记录,之后是单击不同项目导致的一些调试行.它总是打印"10",这是专辑变量的最后一个值(有10张专辑).
Album: 0/Live on radio.electro-music.com
Album: 1/Doodles
Album: 2/Misc Stuff
Album: 3/Drawer Collection
Album: 4/Misc Electronic Stuff
Album: 5/Odds & Ends
Album: 6/Tumbler
Album: 7/Bakelit 32
Album: 8/Film
Album: 9/Bakelit
Album: 10/Slow Zoom/Atomic Heart
contents: 10
contents: 10
contents: 10
contents: 10
contents: 10
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?把我推到墙上,这是.:)
/斯特凡
您需要引入另一个范围,例如:
var clickAlbum = (function (a) {
return function () {
debug("contents: " + a)
};
})(album);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4811 次 |
| 最近记录: |