jquery问题与live

时间:2011-09-16 13:50:32

标签: javascript jquery

我有这样的代码:

$(".delete").live('click', function() {    
    var commentContainer = $(this).parent();
    var id = $(this).attr("id");            
    var string = 'id='+ id ;
    $.ajax({   
        url: "<?php echo site_url('messages/delete') ?>",
        type: "POST",
        data: string,
        cache: false,
        success: function(){
            commentContainer.slideUp('600', function() {$(this).remove();
                $('.messages').fadeOut('2000', function(){$(this).remove();
                    $('#messages').load("<?php echo site_url('messages/show') ?>", function(){
                        $(this).fadeIn('2000')
                    });
                }); 
            });             
        } 
    });
    return false;
});
$('.delete').confirm(
{
    msg: 'You are about to delete this message. Are you sure?<br>',
    buttons: {
    separator: ' - '
    }
});//message deleting    

第一次激活时它正在工作(当我尝试删除消息时,询问问题,如果我说是,则删除消息)。当再次显示数据时,当我单击删除时,它正在删除消息而不询问。有什么问题?

3 个答案:

答案 0 :(得分:1)

显然,“确认”插件无法与live一起使用,而是使用bind

添加元素时,它没有确认绑定,但确实有实时绑定,所以它只会删除。

您可以尝试在加载新内容后重新调用成功函数中的confirm插件,修改插件,手动执行,或者找一个更好考虑的新插件。

答案 1 :(得分:1)

看起来你必须在每次ajax加载后注册confirm插件,因为它没有在内部使用。

最简单的方法是将代码移动到自己的函数中,并在加载回调和页面加载中调用它。

function deleteConfirmSetup() {
   $('.delete').confirm(
   {
        msg: 'You are about to delete this message. Are you sure?<br>',
        buttons: {
            separator: ' - '
        }
    });//message deleting
}   

$(".delete").live('click', function() {    
    $.ajax({   
       url: "<?php echo site_url('messages/delete') ?>",
       type: "POST",
       data: string,
       cache: false,
       success: function(){
          commentContainer.slideUp('600', function() {$(this).remove();
             $('.messages').fadeOut('2000', function(){$(this).remove();
                $('#messages').load("<?php echo site_url('messages/show') ?>", function(){
                    $(this).fadeIn('2000');
                    deleteConfirmSetup(); // Add function call here
                });
            }); 
        });             
    } 
  });
  return false;
});
deleteConfirmSetup(); // Also call function here to setup initially

答案 2 :(得分:0)

我没有使用过确认插件,但是根据需要进行这项工作可能会有点刺激性的黑客攻击:

var bindBackup = jQuery.fn.bind;
jQuery.fn.bind = jQuery.fn.live;
运行.confirm()之前

。然后再恢复它:

jQuery.fn.bind = bindBackup;

我没有尝试过,但live函数doesn't在其来源中实现了bind,所以我看不出它为什么不起作用的原因。