我正在用JavaScript构建一个表,它包含一个带有链接的单元格,单击该单元格时,应触发一个函数。单元格正在循环中添加,其中i
在每个循环中递增,我希望在我的函数中嵌入i
作为参数。
使用下面的代码,当我在接收函数中alert(i);
时,我没有得到正确的数字。首先,无论迭代如何添加的元素都具有数字3
(可能不是偶然的,我在3记录数据源上测试它。)
代码
// Add supplier name to cell as a link
var a = document.createElement('a');
var linkText = document.createTextNode(data[i].supName);
a.appendChild(linkText);
a.title = "Click to create a purchase order.";
a.href = "#";
alert('inserting '+i); // diagnostic line
a.onclick = function(){postData ('main/createPO.php', '', 'makePO(resp,'+i+')', '', '')};
td1.appendChild(a);
tr.appendChild(td1);
以上是for
循环,其中i
递增。
诊断警报,触发:
inserting 0
inserting 1
inserting 2
...但嵌入式i
似乎总是3!
这是重要的一句话:
a.onclick = function(){postData ('main/createPO.php', '', 'makePO(resp,'+i+')', '', '')};
答案 0 :(得分:1)
这个人和你有同样的问题,并且有一个很好的答案: JavaScript closure inside loops – simple practical example
答案 1 :(得分:1)
有一种更简单的方法来解决您的问题。我有一个更复杂的问题版本。
对于每个元素,只需创建一个自定义属性。
$(a).attr(“myValue”,i);
然后在.click上,只需传递数字($(this).attr(“myValue”));