你好每次都遇到同样的问题,当ajax加载动态内容例如:评论或任何帖子,然后所有工作正常。但是在我刷新页面之前按钮的评论不起作用。 在我喜欢的脚本下面帮我解决这个问题
$(".comment_like").click(function()
{
var cID = $(this).attr("ccid");
var cREL = $(this).attr("rel");
var cbox = $(this).attr("box_id");
var cowner = $(this).attr("ownercli");
var cURL='comment_like.php';
var dataString = 'msg_id=' + cID +'&rel='+ cREL+ '&owner='+ cowner+ '&cbox='+ cbox;
if(cREL=='Like')
{
$('#c'+cID).html('Unlike:').attr('rel', 'Unlike').attr('title', 'Unlike');
}
else
{
$('#c'+cID).attr('rel', 'Like').attr('title', 'Like').html('Like:');
}
xhr = $.ajax({
type: "POST",
url: cURL,
data: dataString,
cache: false
}).done(function(htmlc){
$('.cml'+cID).html(htmlc);
});
});
答案 0 :(得分:2)
假设$(“。comment_like”)按钮位于从ajax调用回来的HTML中是否安全?如果是这样,这就是jQuery“on”绑定有用的地方。您可以将事件侦听器绑定到元素可能最终位于其中的容器,而不是绑定到按钮本身(在加载内容之前不存在)。简而言之,当在该容器上发生单击时,jQuery会检查单击的元素以查看它是否匹配并触发您的处理程序。
这样做可以动态加载内容,并且可以防止绑定数百个事件处理程序。
基于此,而不是
$(".comment_like").click(function() {...});
尝试
$('#container').on('click','.comment_like',function() {...});
其中#container是包含您要加载的HTML的包装器。
答案 1 :(得分:0)
Click事件仅绑定到DOM中已有的元素。如果从ajax调用加载容器,则click事件不会绑定到它。这不是真正正确的IMO,但是您可以通过将单击事件添加到.done函数中来快速修复此问题。完成ajax调用后,click事件将绑定到动态添加到DOM的元素。