所以我使用
Jquery手机取得巨大成功,除了一个问题.
现在每次动态内容页面被用户导航,无论什么内容显示,底部总是有一个按钮,当点击电子邮件将内容发送到指定的地址时;工作很棒
现在第一次加载一个页面时,点击会触发该事件一次.在第二次访问时,它被发射了两次,第三次3次等等,你得到点.我已经浏览了网络,并实施了我可以遇到的每一个修复,例如使用“pagecreate”而不是“pageinit”,绑定,解除绑定,删除div,关闭DOM中的缓存,但没有任何工作.我唯一的成功是在点击中使用.one(),但是如果再次点击,则需要触发.这是结构.我必须.js文件加载每个与此开始
现在每次动态内容页面被用户导航,无论什么内容显示,底部总是有一个按钮,当点击电子邮件将内容发送到指定的地址时;工作很棒
现在第一次加载一个页面时,点击会触发该事件一次.在第二次访问时,它被发射了两次,第三次3次等等,你得到点.我已经浏览了网络,并实施了我可以遇到的每一个修复,例如使用“pagecreate”而不是“pageinit”,绑定,解除绑定,删除div,关闭DOM中的缓存,但没有任何工作.我唯一的成功是在点击中使用.one(),但是如果再次点击,则需要触发.这是结构.我必须.js文件加载每个与此开始
$( "#page" ).live( "pageinit",function() {
现在我有一个电子邮件功能和其他东西在一个文件,但它使它更容易分离,我听说没关系.现在,这是在pageinit中调用的电子邮件功能
$('.eb').live('click',function() { var id = $('.eb').attr('id'); var to = $('#recipient').val(); var message = $('#email').html(); var atpos = to.indexOf("@"); var dotpos = to.lastIndexOf("."); if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= to.length) { alert('Please enter a valid email address!'); return false; } if(to.length == 0) { alert('Please enter a valid email address!'); return false; } $.mobile.showPageLoadingMsg(); $.post('./services/service.email.PHP',{ id: id,to: to,message: message},function(data) { if(data.success == true) { $.mobile.hidePageLoadingMsg(); alert('Your recipe has been sent!'); $('#recipient').val(''); return true; } if(data.success == false) { if(data.fail == 1) { alert('An error has occured sending your recipe. Try again soon!'); return false; } if(data.fail == 2) { alert('Please enter a valid email address!'); } } },'json'); return false; });
除了每个新页面上的.click的增量触发之外,一切都完美无缺.
任何人都可以带领我走向正确的方向吗?
解决方法
从jQuery 1.7开始,不推荐使用.live()方法.使用.on()来附加事件处理程序.
如果您使用1.7尝试使用.off()先取消绑定点击事件.
$('.eb').off('click').on('click',function() { // ... });
如果你必须使用.live(),你可以用.die()取消绑定事件.
$('.eb').die('click').live('click',function() { // ... });
或更好地使用.delegate()和.undelegate()取消父元素:
$(document).undelegate('.eb','click').delegate('.eb','click',function() { // ... });