1

我有一个用于查看照片的页面,用户可以在上面提交评论
我写了一个 js 文件名(ajax.js)以每 30 秒在该页面上加载新的评论
我写另一个 js 文件(名称 feed.js)什么时候用户单击每个评论评论附近的删除图标隐藏和删除
代码feed.js

$('a[cm-del]').click(function () {
    var cmid = $(this).attr('cm-del');
    var typeid = $(this).attr('data-type');
    $('li[last-id=' + cmid + ']').effect('pulsate');
    $('li[last-id=' + cmid + ']').hide(300);
    $.post('/post/comment.php', {
        cmdelete: cmid,
        type: typeid
    }, function () {});
});
codes ajax.js:

function getmorecmphoto() {
    $('li[data-hiv]').hide();
    var lastid = $('li[last-id]:last').attr('last-id');
    if (lastid === '') {
        var lastid = 0;
    }
    var oldcm = $('div[comments-id]').html();
    var photoid = $('div[comments-id]').attr('comments-id');
    $.post('/post/photo.php', {
        lastid: lastid,
        photoid: photoid
    }, function (getlastcmphoto) {
        $('div[comments-id]').html(oldcm + getlastcmphoto);
    });
}
setInterval(getmorecmphoto, 25000);

当用户第一次打开此页面时,它会加载最后 10 条评论
,并且一切正常,
但是在 25-30 秒后,当使用 ajax 加载新评论时,我的 feed.js 不适用于新评论?
我该怎么办?
每次加载新评论时,我都会加载 feed.js,但因为在 10 分钟内用户加载了大约 20 个 feed.js!
我可以做点别的吗?
谢谢你

4

3 回答 3

1

您需要事件委托,将事件绑定到最近的静态(非动态加载)容器并委托操作。

改变这个:

$('a[cm-del]').click(function(){

对此:

$(document).on('click','a[cm-del]',function(){

我不知道你的标记是什么样子的,所以我在这里使用文档作为后备。

注意:如果你使用 jQuery <1.7 使用live()而不是on()

$('a[cm-del]').live( 'click', function(){
于 2013-09-01T10:26:39.477 回答
0

我认为 .live 应该可以工作。

$('a[cm-del]').live("click",function(){
    var cmid = $(this).attr('cm-del');
    var typeid = $(this).attr('data-type');
    $('li[last-id='+cmid+']').effect('pulsate');
    $('li[last-id='+cmid+']').hide(300);
    $.post('/post/comment.php',{cmdelete:cmid,type:typeid},function(){
    });
});

如果不起作用,请这样做..首先更改 feed.js 之类的

function SetEvent(){
      $('a[cm-del]').unbind("click").click(function(){
         var cmid = $(this).attr('cm-del');
         var typeid = $(this).attr('data-type');
         $('li[last-id='+cmid+']').effect('pulsate');
         $('li[last-id='+cmid+']').hide(300);
         $.post('/post/comment.php',{cmdelete:cmid,type:typeid},function(){
         });
       });
 }

现在改变 ajax.js 像

function getmorecmphoto(){
    $('li[data-hiv]').hide();
    var lastid = $('li[last-id]:last').attr('last-id');
    if(lastid === ''){
        var lastid = 0;
    }
    var oldcm = $('div[comments-id]').html();
    var photoid = $('div[comments-id]').attr('comments-id');
    $.post('/post/photo.php',{lastid:lastid,photoid:photoid},function(getlastcmphoto){
        $('div[comments-id]').html(oldcm + getlastcmphoto);
         SetEvent();
    });
}
setInterval( getmorecmphoto, 25000 );

我认为它会起作用。谢谢

于 2013-09-01T10:41:26.813 回答
-1

我认为您可以通过将 feed.js 代码的第一行更改为以下内容来解决此问题:$('a[cm-del]').live('click', function(){

于 2013-09-01T10:18:02.630 回答