在列表视图上防止更多点击事件(一旦点击)

时间:2013-06-04 09:19:27

标签: javascript jquery jquery-mobile jquery-mobile-listview

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

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

在处理说明页面的开头时,如何停止在列表视图上收听更多点按?

2 个答案:

答案 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。