我有这样的代码:
$(".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
第一次激活时它正在工作(当我尝试删除消息时,询问问题,如果我说是,则删除消息)。当再次显示数据时,当我单击删除时,它正在删除消息而不询问。有什么问题?
答案 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
,所以我看不出它为什么不起作用的原因。