我在列表视图中有一个项目列表。单击一个 li 会发送一个 JSON 请求并打开一个描述页面。
由于打开描述页面需要 1 或 2 秒,因此有时间单击列表中的另一个项目,然后触发更多事件,这是我不想要的。这最终使滚动(使用 iscrollview)变得混乱,当返回列表时,底部栏会上下移动。
在处理描述页面的打开时,如何停止收听列表视图上的更多点击?
我在列表视图中有一个项目列表。单击一个 li 会发送一个 JSON 请求并打开一个描述页面。
由于打开描述页面需要 1 或 2 秒,因此有时间单击列表中的另一个项目,然后触发更多事件,这是我不想要的。这最终使滚动(使用 iscrollview)变得混乱,当返回列表时,底部栏会上下移动。
在处理描述页面的打开时,如何停止收听列表视图上的更多点击?
没有任何东西可看,我们很难为您提供帮助。
但是,避免这种情况的最简单方法是使用全局变量作为标志。
您可以将全局变量(即:在 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
});
这是我添加的一些代码:
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。