我在列表视图中有一个项目列表。单击一个li发送JSON请求并打开描述页面。
由于描述页面打开需要1或2秒,因此有时间点击列表中的另一个项目,然后触发更多事件,这是我不想要的。这最终会使滚动(使用iscrollview)变得混乱,当返回列表时,底栏会上下移动。
在处理说明页面的开头时,如何停止在列表视图上收听更多点按?
答案 0 :(得分:1)
无需看,我们很难帮助你。
但是,避免这种情况的最简单方法是使用全局变量作为标志。
您可以将全局变量(即:在JavaSCript文件的根级别中)设置为false:
tapProcessing = false;
然后,无论何时开始处理,请检查此标志,如果不是,则进行处理。
这是一个基本的例子,向您展示我的意思:
$('.selector').click(function(e){
if(!tapProcessing){
//the function is not processing, therefore set the flag to true:
tapProcessing = true;
//do your load/etc, and reset the flag to false in the callback (when finished):
$.get("test.php", function(data) {
// process your data here
// set your flag back to false:
tapProcessing = false;
});
}else{
//the function is already being processed from a previous click
}
e.preventDefault(); //assuming it's a link
});
答案 1 :(得分:-1)
以下是我添加的代码:
el是我的列表,事件是登录页面 将tapProcessing设置为false只应在“在changePage()请求完成后将页面加载到DOM并且所有页面转换动画都已完成时”(JQM doc:http://jquerymobile.com/demos/1.2.0/docs/api/events.html)
$('#el').click(function(e){
if(tapProcessing) {
alert('prevent');
e.preventDefault(); //assuming it's a link
} else {
alert('oktap');
tapProcessing = true;
}
});
$(document).bind("pagechange", function(event, options) {
if(options['toPage']['selector'] == '#event') {
tapProcessing = false;
}
});
如果我收到断开连接事件或超时,我还会将tapProcessing设置为false。