动态添加事件侦听器。函数触发,但如何发送变量参数?

时间:2013-04-02 23:09:36

标签: javascript events

我正在用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+')', '', '')};

2 个答案:

答案 0 :(得分:1)

这个人和你有同样的问题,并且有一个很好的答案: JavaScript closure inside loops – simple practical example

答案 1 :(得分:1)

有一种更简单的方法来解决您的问题。我有一个更复杂的问题版本。

对于每个元素,只需创建一个自定义属性。

$(a).attr(“myValue”,i);

然后在.click上,只需传递数字($(this).attr(“myValue”));