jQuery:在click函数中的append()中链接

时间:2010-09-18 11:56:37

标签: jquery

我有这个:

$('#wallCommentResponse' + wallID).append('<div class="userWallComment"><a id="showCommentLink' + wallID +'" class="showCommentLink" ref="'+ wallID +'" data-id="'+ howMany +'" style="cursor: pointer;">Hide comments</a></div>').show();

点击点击功能。

我有这个显示一个框,所有评论的底部都有“隐藏评论”链接。它显示了我想要的方式,但是当我点击时没有任何反应。我已将.showCommentLink绑定到

        $('.hideWhenShowAll' + wallID).show(); 

我有另一个链接,就像这样,但是没有通过append()显示,而是普通的HTML,你也可以点击“隐藏评论”,它可以很好地工作,并且它绑定到相同的功能。

当你在点击时链接触发的同一个函数中追加链接时,一定有问题吗?

有什么问题?谢谢

3 个答案:

答案 0 :(得分:3)

将您当前的.click(func)更改为.live('click', func),如下所示:

$(".showCommentLink").live("click", function() {
  $('.hideWhenShowAll' + $(this).attr("ref")).show(); 
});

这适用于稍后添加的元素,通过.append()或其他任何方法,当你有许多元素时,它也会更便宜。目前你的$(".showCommentLink")选择器正在查找元素,绑定到它们......如果它们后来被添加,则它们不会获得点击处理程序,因为选择器在运行时没有找到这些新元素 / em>的

答案 1 :(得分:1)

这篇文章...... http://jupiterjs.com/news/why-you-should-never-use-jquery-live ...让我确信live支持delegate

使用委托,你的jquery看起来像......

$('body').delegate('.showCommentLink','click', function(){
    $('.hideWhenShowAll' + $(this).attr('ref')).show(); 
});

答案 2 :(得分:-1)

我想更清楚地了解Nick Craver的答案。

一旦DOM被加载到......

$(document).ready(function(){
    //put js here
});

...正在运行。如果将函数绑定到元素,那么所有当时存在的元素都会发生这种情况。如果添加其他DOM元素并且希望某些函数绑定到它们,则可以执行以下两种操作之一。 - 手动绑定它们 -use .live()正如Nick Craver建议的那样,因此新DOM元素的绑定会自动发生。