将值传递给 onclick

IT技术 javascript loops closures
2021-03-05 20:00:04

如果我使用循环创建大量 HTML 元素,例如

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

然后当元素被点击时, i 传递给的my_function值总是 100,不管是什么数字元素调用它。我已经通过使用解决了这个问题

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

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

3个回答

i随着循环的每次迭代变化。您需要一个闭包来捕获 的值i

(function(i) {
    my_element.onclick = function () {my_function (i)};
}(i))
你的括号是错误的,但这个想法奏效了。谢谢。
2021-04-20 20:00:04

如果您编写了一个为您构建处理程序函数的函数,您可以使用新的作用域来确保您获得所需的数字。例如:

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);
}
这是一个非常好的主意。谢谢。
2021-05-16 20:00:04

如果我是你,我将使用 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);
  });

});

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

你的回答完全错误,没有抓住问题的重点。
2021-04-22 20:00:04