将值传递给onclick

如果我使用循环创build大量的HTML元素,比如

for (i= 1; i < 100; i++) { var my_element = document.createElement ("td"); row.appendChild (my_element); my_element.onclick = function () {my_function (i)); } 

那么当单击元素时,传递给my_function值始终为100,而不pipe数字元素是否调用它。 我通过使用已经解决了这个问题

 my_element.id = "something"+i; my_element.onclick = function (e) {my_function (e.target.id)}; 

(对于Internet Explorer,显然target需要是srcElement 。)我很想知道是否有任何方法来创build函数,而不必将ID添加到像这样的元素。

i的值随循环的每次迭代而改变。 你需要一个closures来捕捉i的价值 :

 (function(i) { my_element.onclick = function () {my_function (i)}; }(i)) 

如果你编写一个函数来构build你的处理函数,那么你可以使用新的作用域来保证你得到你想要的数字。 例如:

 function BuildHandler (i) { return function () { alert(i); }; for (i= 1; i < 100; i++) { var my_element = document.createElement ("td"); row.appendChild (my_element); my_element.onclick = BuildHandler(i); } 

如果我是你,我会使用Jquery(或原型或任何可用的js框架)

在每个元素上,你应该添加像myid这样的属性,这样当你点击的时候,你可以检索它。

 for(i=1; i ++ ; i<100){ var myelement = "<td myid='something"+i+"' class='myTD'></td>" ; row.append(myelement); } .... $(document).ready(function(){ $('.myTD').click(function(){ var id = $(this).attr('myid'); my_function(id); }); }); 

我在我的networking应用程序上做了这个技巧:)