我有这个:
$('#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,你也可以点击“隐藏评论”,它可以很好地工作,并且它绑定到相同的功能。
当你在点击时链接触发的同一个函数中追加链接时,一定有问题吗?
有什么问题?谢谢
答案 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元素的绑定会自动发生。