我正在用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);
上面是在i
递增的for
循环中。
诊断警报将触发:
inserting 0
inserting 1
inserting 2
..。但是嵌入的i
似乎总是3!
这是重要的一行:
a.onclick = function(){postData ('main/createPO.php', '', 'makePO(resp,'+i+')', '', '')};
发布于 2013-04-02 23:17:52
这个人和你有同样的问题,有一个很好的答案:JavaScript closure inside loops – simple practical example
发布于 2013-04-02 23:24:32
有一种更简单的方法来解决你的问题。我对这个问题有一个更复杂的版本。
对于每个元素,只需创建一个自定义属性。
$(a).attr("myValue",i);
然后在.click上,只需传递Number($(.click).attr(“myValue”));
https://stackoverflow.com/questions/15776066
复制相似问题