与load()或现场奇怪的问题()!
题
我负载负载()的网页,然后我创建dinamically一个
标签。然后我用活的()绑定一个click事件,并触发功能。在结束通话卸载()。
的问题是,当我再次加载相同页面(不刷新)当单击该功能将被解雇的两倍。如果我(与卸载再次())再次退出并再次点击加载该页面将火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);
}
我有这个网页上,还对上述现场FNC和所有的工作以及其他$.post
内。上面一个也适用,但就像我的第二负载说会触发两次,3次等等...
对我来说,怪异的是,如果replece用的console.log控制台(“二”);保存页面和不刷新,将火上的不同行加载页 - 一二 -
如果我卸载页面替换的console.log控制台(“三”);和负载再次将火一个二,三。 我尝试使用:
$.ajax({ url: 'updateDB.php', data: data, type: 'POST', cache:false });
$.ajaxSetup ({ cache: false });
header("Cache-Control: no-cache");
这一切都不它的工作。而我只有在这个FNC有这个问题。 你认为,这可能是这个原因,它会记住它会记住以前的行为,并再次闪光?
解决方案 2
实际上答案属于@vittore。
我就试着更好地解释一点发生了什么:
的 live ()
FN是页面内,我是负载。和第一load ()
现场FN分配处理器点击。但是当你使用卸载,然后从该页面点击处理器遗迹之间的连接的所有元素。
而当我再次加载相同页面(不刷新),该live
功能将保留旧的处理程序,并再次还附上了处理,等等,每次load ()
使用它。
特技它die ()
前使用unload ()
。但有一件事您考虑:我们不能使用live()
链接($('div').children().live()
将无法正常工作),也不过:
$('.div .ctr').live()
将工作。
只是打电话$('.ctr').die()
将无法工作。
所以,你必须FN相同的选择$('.ctr').live()
使用两者结合,然后$('.ctr').die()
也许这将帮助别人。并且还检查新1.4.2 delegate ()
和undelegate ()
其他提示
我想你可能必须通过具有VS $一个错字($本)(本);点击 同时注意,在JavaScript中的delete运算符,所以你可能想尝试另一种函数名。结果 你也可能从缓存某处痛苦(默认Web服务器设置.js文件缓存)