如何将 click 事件绑定到 jQuery $.each 循环中创建的 dom 元素?似乎只绑定到最后一个元素!

发布于 2024-08-03 23:11:17 字数 422 浏览 3 评论 0原文

考虑以下代码,理论上单击事件应该绑定到每个元素,但由于某种原因(我不知道)它只会绑定到最后一个链接。有人有什么想法吗?

$.each(data, function(i,aitem){ 
linkid = 'address'+i;                   
$("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+ aitem.Address +'</a></p>');                    
$('#'+linkid).bind("click", function(){
    otherfunction(i);
    return false;
});

});

Consider the following code, in theory the click event should bind to each element but for some reason (unbeknown to me) it will only bind to the last link. does anyone have any ideas?

$.each(data, function(i,aitem){ 
linkid = 'address'+i;                   
$("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+ aitem.Address +'</a></p>');                    
$('#'+linkid).bind("click", function(){
    otherfunction(i);
    return false;
});

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

七度光 2024-08-10 23:11:18

这是刚接触闭包的人的常见问题。

正确的解决方案是这样做:

$.each(data, function(i,aitem){ 

  linkid = 'address'+i;                                   
  $("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+   aitem.Address +'</a></p>');                                        
  $('#'+linkid).bind("click", function(){
     (function(i){
        otherfunction(i);
        return false;
     }(i));
  });


});

this is a common problem with people who are new to closures.

the correct solution would be to do this:

$.each(data, function(i,aitem){ 

  linkid = 'address'+i;                                   
  $("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+   aitem.Address +'</a></p>');                                        
  $('#'+linkid).bind("click", function(){
     (function(i){
        otherfunction(i);
        return false;
     }(i));
  });


});
南巷近海 2024-08-10 23:11:17

尝试:

var linkid = ...;
var link = $("<a></a>").attr('id', linkid).attr('href', '#').text(aItem.Address).click(function(){ alert('ran'); return false; });


$('#SearchResults').append(link.wrap("<p></p>"));

这个想法是,您希望将单击事件绑定到您正在创建的每个链接,因此只需将其链接到创建代码的末尾,并明确说明即可。

希望有帮助。

try:

var linkid = ...;
var link = $("<a></a>").attr('id', linkid).attr('href', '#').text(aItem.Address).click(function(){ alert('ran'); return false; });


$('#SearchResults').append(link.wrap("<p></p>"));

The idea being that you want to bind your click event to each link that you are creating, so just chain it to the end of your creation code, and be explicit about it.

Hope that helps.

暗地喜欢 2024-08-10 23:11:17

添加实时点击事件怎么样?

$("a[id^=address]").live("click", function() {
    alert("ran");
    var value = $(this).attr("id").substr(7);
    myFunction(value);
    return false;
});

应该向所有这些链接添加点击事件(:

编辑:包含达林的提示...

What about adding a live click-event?

$("a[id^=address]").live("click", function() {
    alert("ran");
    var value = $(this).attr("id").substr(7);
    myFunction(value);
    return false;
});

should add a click event to all those links (:

edit: Included tip from darin...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文