我使用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上遇到这个问题。 你怎么想,这可能是原因,它记得它记得以前的动作并再次发射?
答案 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 ()