我有一个非常简单的用例。
在页面init上加载一个html。
$(document).on('pageinit',function(){
window.localStorage.setItem("page",'intro_1');
$('#navigation_main').load('html/intro_1.html');
});
在滑动时只需更改dom。
var flag = 0;
$("body").bind("swipeleft",function(event) {
flag +=1;
page = window.localStorage.getItem("page");
alert(flag);
switch(page){
case 'intro_1':
window.localStorage.setItem("page",'intro_2');
$('#navigation_main').load('html/intro_2.html');
break;
case 'intro_2':
window.localStorage.setItem("page",'challenges');
$('#navigation_main').load('html/challenges.html');
break;
case 'challenges':
window.localStorage.setItem("page",'risk_areas');
$('#navigation_main').load('html/risk_areas.html');
break;
default:
window.localStorage.setItem("page",'intro_1');
$('#navigation_main').load('html/intro_1.html');
break;
}
});
现在向左滑动两次,导致后续页面被加载。我怎么能阻止这个?
答案 0 :(得分:3)
您可以尝试使用$("body").one
代替$("body").bind
,以便只调用一次。
答案 1 :(得分:2)
我认为你有多次绑定事件,可以通过几种方式解决。
在绑定事件之前使用 $(body).unbind(); 。 Unbind将删除所有已绑定的事件。不幸的是,这不是一个好的预防措施,因为你经常绑定/取消绑定,从而导致大量的处理开销。
有一种替代方法可以使用事件绑定/解除绑定,生存/死亡和开/关。在再次绑定之前不使用解绑定,而是使用jQuery事件过滤器,它可以用于标识事件是否已经绑定。不要忘记从下面发布的链接下载它(它不是jQM的标准部分)。
http://www.codenothing.com/archives/2009/event-filter/
这是我的用法示例:
$('#carousel div:Event(!click)').each(function(){
//If click is not bind to #carousel div do something
});
我正在使用每个因为我的旋转木马div有许多内部块但原则是相同的。如果#carousel内部div元素没有click事件,则添加该事件。在您的情况下,这将阻止多个事件绑定。