将值传递给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应用程序上做了这个技巧:)