Event handlers inside a Javascript loop - need a closure?
我正在处理一些我从其他人手中接过的HTML和Javascript代码。该页面每十秒重新加载一个数据表(通过异步请求),然后使用一些DOM代码重新构建表。有问题的代码看起来像这样:
1 2 3 4 5 6 7 8 9 10 | var blah = xmlres.getElementsByTagName('blah'); for(var i = 0; i < blah.length; i++) { var td = document.createElement('td'); var select = document.createElement('select'); select.setAttribute("...","..."); select.onchange = function() { onStatusChanged(select, callid, anotherid); }; td.appendChild(select); } |
但是当为
我怀疑这是因为我使用
有没有办法可以复制我传递给
我更改了标题以更好地反映问题和接受的答案。
确实,你需要在这里实现一个闭包。 这应该工作(让我知道 - 我没有测试它)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var blah = xmlres.getElementsByTagName('blah'); for(var i = 0; i < blah.length; i++) { var td = document.createElement('td'); var select = document.createElement('select'); select.setAttribute("...","..."); select.onchange = function(s,c,a) { return function() { onStatusChanged(s,c,a); } }(select, callid, anotherid); td.appendChild(select); } |