【问题标题】:Prevent user from clicking somewhere else while ajax loading a page in jQuery Mobile防止用户在 jQuery Mobile 中 ajax 加载页面时单击其他地方
【发布时间】:2012-09-04 22:31:45
【问题描述】:

我正在使用 jQuery Mobile 为 PC 和平板电脑创建一个 Web 应用程序。

我正在使用 jQuery Mobile 的 Ajax 导航功能。

因此,如果用户点击链接,加载微调器会显示。但是当 JQM 试图加载该页面时,用户可能会单击另一个链接。在这种情况下,在完全加载完第一页后,JQM 会加载第二页,然后转到第二页。

现在,我想在 ajax 导航工作时禁用所有内容。 一切都意味着,不应单击其他链接,不应调用其他 javascript click 函数,无法滚动,还有……

每个 ajax 导航也应该有一个超时时间。

如何做到这一点?

【问题讨论】:

  • 可能我应该在屏幕上放置一个透明的覆盖层,但是如何?在哪里?
  • 正是你所说的。这是一个漂亮的插件来做到这一点......malsup.com/jquery/block
  • @VDP 但是如何用这个插件替换 jQuery Mobile 默认加载微调器?
  • 我们可以在加载微调器显示和隐藏时检测到吗?如果是这样,我们可以简单地将divposition:absolute 放在页面上...
  • 您可以阻止该加载消息 (showLoadMsg:false)。只需阻止该消息并收听“pagebeforeload”即可将您的 div 设置在页面上。 (也许你必须监听 div 上的点击事件并防止冒泡)

标签: javascript jquery jquery-mobile


【解决方案1】:

jQM 有几个不同的事件会在新页面完成加载到 DOM 时触发。为什么不在点击链接后暂时停用所有链接,直到转换完成?

$('body').on('click', 'a', function() {
    $('body').on('click', 'a', function() {
        return false;
    }); 
    $(document).bind('pagechange', function() { 
        $('body').off('click', 'a'); 
    }); 
});

我使用了上面的pagechange 事件,但还有一些其他事件可能更适合您的目的。 http://jquerymobile.com/demos/1.1.1/docs/api/events.html

【讨论】:

  • 首先,有一些按钮不使用<a>标签,它们由javascript click事件处理。接下来,这可能太慢了,尤其是在平板电脑上……(例如,Mobile Safari 的 Javascript 引擎太慢了)
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多