Javascript 带live的jquery问题
我有这样的代码:Javascript 带live的jquery问题,javascript,jquery,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') ?>"
$(".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
$(“.delete”).live('click',function(){
var commentContainer=$(this.parent();
var id=$(this.attr(“id”);
变量字符串='id='+id;
$.ajax({
url:“”,
类型:“POST”,
数据:字符串,
cache:false,
成功:函数(){
slideUp('600',function(){$(this.remove();
$('.messages').fadeOut('2000',function(){$(this.remove();
$('#messages').load(“,function(){
$(this.fadeIn('2000'))
});
});
});
}
});
返回false;
});
$('.delete')。请确认(
{
msg:“您将要删除此邮件。确定吗?
”,
按钮:{
分隔符:'-'
}
});//消息删除
当它第一次被激活时(当我试图删除消息时,会询问问题,如果我说是,消息会被删除)。当数据再次显示时,当我单击“删除”时,它是在不询问的情况下删除消息。问题出在哪里?很明显,“确认”插件没有在live
上运行,而是在使用bind
添加元素时,它没有确认绑定,但有活动绑定,因此它只会删除
加载新内容后,您可以尝试在success函数中重新调用确认插件,修改插件,自己手动执行,或者找到一个经过更好思考的新插件。看起来您必须在每次ajax加载后注册确认插件,因为它没有在内部使用live 最简单的方法是将代码移动到自己的函数中,并在加载回调和页面加载中调用该函数
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
函数deleteConfirmSetup(){
$('.delete')。请确认(
{
msg:“您将要删除此邮件。确定吗?
”,
按钮:{
分隔符:'-'
}
});//消息删除
}
$(“.delete”).live('click',function(){
$.ajax({
url:“”,
类型:“POST”,
数据:字符串,
cache:false,
成功:函数(){
slideUp('600',function(){$(this.remove();
$('.messages').fadeOut('2000',function(){$(this.remove();
$('#messages').load(“,function(){
$(本).fadeIn('2000');
deleteConfirmSetup();//在此处添加函数调用
});
});
});
}
});
返回false;
});
deleteConfirmSetup();//也可以在此处调用函数进行初始设置
我还没有使用确认插件,但要想让这项工作如你所愿,一个稍微令人恼火的黑客可能会这样做:
var bindBackup = jQuery.fn.bind;
jQuery.fn.bind = jQuery.fn.live;
在运行之前,请确认()。然后再恢复它:
jQuery.fn.bind = bindBackup;
我还没有尝试过,但是live
函数在它的源代码中实现了bind
,所以我看不出它不起作用的原因。如果你可以发布一个链接或创建一个jsfiddle,那么在我使用codeigniter和本地主机的时候,这将是非常有用的。我是JS和JQ的新手,现在我不知道该做什么,我有点困惑。创建如下函数:`function delete_message(){$('.delete')。确认({msg:'您将要删除此消息。是否确定?
',按钮:{separator:'-'}}});//message deleting}`并将onClick=“delete_message();”添加到a标记(用于删除),但现在它正在毫无疑问地删除???@Sasha我编辑了我的答案,以显示我的意思。(我去掉了你的一部分代码,因为它很长,所以不要复制和粘贴整个代码)别担心。。。刚试过,它就不起作用了,因为confirm
插件没有直接从选择器应用bind
。我会把这个放在这里作为参考,相信没有人会投反对票!我做错了什么事。我在一开始就添加了这个,现在有一个问题,但是如果我单击yes或no,什么都不会发生???即使是我介绍这个的方式也是一种轻微的攻击,要让它工作起来需要更多的攻击。我建议使用@Richard的答案而不是这个。