load()或live()的奇怪问题!

时间:2010-03-30 02:27:50

标签: jquery ajax post load live

我使用load()加载页面,然后创建一个

标签。然后我使用live()来绑定click事件并触发一个函数。最后调用unload()。

问题是,当我再次加载相同的页面(没有刷新)时,单击该功能将被触发两次。如果我再次退出(再次使用unload())并再次加载页面,则单击将触发3次,依此类推......我的代码样本为:

$('#tab').click(function() {
 $('#formWrap').load('newPage.php');
});
$('div').after('<p class="ctr" ></p>');
$('p.ctr').live('click', function(e) {
   if($(e.target).is('[k=lf]')) { console.log ('one'); delete ($this); }
   else if ....
});
function delete () {
  $.post( 'update.php',  data);
}

我在此页面上还有其他$.post以及上面的实时fnc,并且一切正常。上面的一个也有效,但就像我说的第二次加载会发射两次和3次等等...... 对我来说奇怪的部分是如果用console.log('two')补充控制台;保存页面并加载页面而不刷新它将触发不同的行 - 一两 -

如果我卸载页面用console.log替换控制台('三');并再加载将激发一两个和三个。 我尝试使用:

$.ajax({ url: 'updateDB.php', data: data, type: 'POST', cache:false });

$.ajaxSetup ({ cache: false });

header("Cache-Control: no-cache");

这一切都没有奏效。我只在这个fnc上遇到这个问题。 你怎么想,这可能是原因,它记得它记得以前的动作并再次发射?

2 个答案:

答案 0 :(得分:0)

我认为你可能因为($ this)vs $(this)而输入错误; 另请注意,javascript中有一个删除操作符,因此您可能需要尝试其他函数名称 您可能还在某处遇到缓存(默认情况下Web服务器为.js文件设置缓存)

答案 1 :(得分:0)

实际上答案属于@vittore。

我会尝试更好地解释发生的事情:

live () fn位于我正在加载的页面内。在第一个load ()上,live fn指定处理程序单击。但是当您使用卸载然后从该页面中删除所有元素时,点击和处理程序之间的连接仍然存在。

当我再次加载同一页面(没有刷新)时,live函数将保留旧处理程序并再次附加处理程序,依此类推每次使用它load ()

die ()之前使用unload ()的诀窍。但还有一件事需要考虑:我们不能在live()使用链接($('div').children().live()不起作用),但也是如此:

$('.div .ctr').live()将有效。

只是致电$('.ctr').die()无效。

所以你必须同时使用fn相同的选择器$('.ctr').live()然后$('.ctr').die()

也许这会对某人有所帮助。并检查新的1.4.2 delegate ()undelegate ()