0

我有一些动态创建的 div,我正在使用绑定/实时(尝试了两种,相同的结果)来添加点击功能。但是,它返回具有相同类的所有 div。

例子;

我有 3 个动态生成的 div

1 2 3

如果我单击 2,警报方法会显示 1,然后显示 2,然后显示 3。我只需要单击的那个。谢谢!

$("#borang_main_form").append('<div class="borang-row" id="'+id+'"><label id="label_'+id+'"></label><input id="textbox_'+id+'" type="text" /></div>').bind("click", function(){alert(id);});

我已经尝试过了,它有效。

$("#borang_main_form").append('<div class="borang-row" id="'+id+'"><label id="label_'+id+'"></label><input id="textbox_'+id+'" type="text" /></div>').delegate("#" + id, "click", function(){alert(id);});

不过看起来有点脏。有没有更好的方法来处理这样的事情?

4

2 回答 2

1

您可以$(e.target)在单击处理程序中使用function(e){ ... }来获取引用您实际单击的元素的 jquery 对象。

http://jsfiddle.net/fDZ4J/1/

于 2012-12-04T09:44:37.200 回答
1

当您使用循环进行迭代时,您使用方法链接,这基本上最终将 n 个事件绑定添加到同一个父项(“#borang_main_form”)

在您的循环中首先附​​加项目,然后在循环之外将事件侦听器添加到各个子元素。

for(var i=0; i<3; i++)
{
  var id = i;
  $("#borang_main_form").append('<div class="borang-row" id="'+id+'"><label id="label_'+id+'"></label><input id="textbox_'+id+'" type="text" /></div>')
}
$('.borang-row').on("click", function(){alert($(this).attr('id'));});

在事件处理函数中 $(this) 将被映射为被点击的项目(事件的触发器),并通过$(this).attr('id')你将获得该元素的 id 属性。

于 2012-12-04T09:57:42.447 回答