这段代码有什么问题?阅读这篇文章似乎对于每个循环,jquery 应该附加一个函数,并为每次迭代分配值。相反,它将 i = 2 附加到每个对象。它为什么要这样做,我怎样才能让它附加预期值(例如 0、1、...)?
//data.length is 2.
for (i=0; i<data.length; i++) {
// Attach the click function
linkId = 'a#' + pk;
$(linkId).click(function(e) {
e.preventDefault();
console.log(i, pk, data);
});
};
console.log -- 每个链接都有相同的参数
2 "52fef25e391a56206f03be6e" [object Array]
最佳答案
您假设一个 block 创建了一个新的变量作用域。它不在 JavaScript 中。只有函数执行会。</p>
如果您改用 $.each()
,您为其提供的回调将在每次迭代时被调用,因此您将对每个迭代都有一个新的作用域。
$.each(data, function(i,item) {
// ^---^---function parameters are local to this scope
// v--declare a variable local to this scope
var linkId = 'a#' + pk;
// v--the function made in this scope can access the local vars
$(linkId).click(function(e) {
e.preventDefault();
console.log(i, pk, data, linkId, data[i]);
});
});
关于Javascript/jQuery 将不同的函数参数附加到 .click() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803811/