3

我在列表视图中有一个项目列表。单击一个 li 会发送一个 JSON 请求并打开一个描述页面。

由于打开描述页面需要 1 或 2 秒,因此有时间单击列表中的另一个项目,然后触发更多事件,这是我不想要的。这最终使滚动(使用 iscrollview)变得混乱,当返回列表时,底部栏会上下移动。

在处理描述页面的打开时,如何停止收听列表视图上的更多点击?

4

2 回答 2

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
});
于 2013-06-04T09:27:19.907 回答
-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。

于 2013-06-04T11:00:32.813 回答