首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery手机“手机”事件触发两次?

jQuery手机“手机”事件触发两次?
EN

Stack Overflow用户
提问于 2012-05-17 13:03:56
回答 2查看 3K关注 0票数 2

我的index.html看起来是这样的:

代码语言:javascript
复制
<!DOCTYPE html>
<html class="ui-mobile-rendering">
<head>
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/jquery.mobile-1.1.0.min.css" />
    <list rel="stylesheet" href="css/app.css" />
    <script src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/underscore.js"></script>
    <script type="text/javascript" src="js/backbone.js"></script>
    <script type="text/javascript" src="js/views/attachmentlist.js"></script>
    <script type="text/javascript" src="js/models/attachmentmodel.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
    <script src="js/jquery.mobile-1.1.0.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/cordova-1.7.0rc1.js"></script>
    </head>

    <body></body>

</html>

当然,这些文件都没有jQuery移动的引用,只有索引才有引用。

我的app.js文件如下所示:

代码语言:javascript
复制
$(document).live("mobileinit", function () {
    console.log('in Mobile Init');
    $.mobile.ajaxEnabled = false;
    $.mobile.linkBindingEnabled = false;
    $.mobile.hashListeningEnabled = false;
    $.mobile.pushStateEnabled = false;

    // Remove page from DOM when it's being replaced
    $('div[data-role="page"]').live('pagehide', function (event, ui) {
        $(event.currentTarget).remove();
    });
});

有东西导致“移动init”发射两次。我不知道它是什么,甚至它是否真的是一个问题,但这感觉像是一些不应该发生的事情。

有什么办法能解决这个问题吗?

编辑

实际上,我刚刚注意到,如果我将一个简单的"script“标记直接放入其中并在其中执行一个console.log,那么它在这段代码中运行twice....sooo....something将导致我的整个页面被初始化两次。

实际上,我的整个安装程序看起来好像是加载了两次。当应用程序第一次加载时,我一直将console.logs放在一系列发生的事情上,并且所有的事情都发生了两次。

EN

回答 2

Stack Overflow用户

发布于 2012-05-17 18:32:25

我曾经遇到过类似的事情。不管它有什么价值,我就是这样解决的:

代码语言:javascript
复制
$(document).bind("mobileinit", function() {
  $.extend(  $.mobile , {
    autoInitializePage: false,
    loadingMessage: false
  });
});

如果我不得不修改它以适应您的代码,请尝试如下:

代码语言:javascript
复制
$(document).live("mobileinit", function () {
    console.log('in Mobile Init');

    $.extend(  $.mobile , {
        autoInitializePage: false,
        loadingMessage: false
    });

    $.mobile.ajaxEnabled = false;
    $.mobile.linkBindingEnabled = false;
    $.mobile.hashListeningEnabled = false;
    $.mobile.pushStateEnabled = false;

    // Remove page from DOM when it's being replaced
    $('div[data-role="page"]').live('pagehide', function (event, ui) {
        $(event.currentTarget).remove();
    });
});

另外,您不应该使用jQuery的.live()函数。根据他们自己的文档

在jQuery 1.7中,不推荐使用.live()方法。使用.on()附加事件处理程序。较早版本的jQuery的用户应该优先使用.delegate()而不是.live()

票数 1
EN

Stack Overflow用户

发布于 2012-05-17 18:40:42

这可能不是你想听到的答案,但我相信这确实是我能给你的最有帮助的建议。

如果可能的话,我强烈建议您不要使用Jquery。我最近在一个团队工作,这个团队在Jquery手机做这样的事情时遇到了一个又一个问题。如果在加载页面时有任何异步代码,那么几乎不可能让Jquery的事件与您自己的事件同步。

如果你需要一个无缝的,本土的感觉你的移动网站,我强烈建议试用Spine和RequireJS。根据您的设计限制,Spine也可用,并将为您做一些工作。

Jquery手机本质上使浏览器以为你的站点是一个单一页面的应用程序,因此它最终会觉得非常笨重。如果你有时间做好备份,并真正构建一个真正的单页应用程序,你最终会得到更干净、更可靠的代码和一个更实用的应用程序。

抛出。您的开发团队和用户将感谢您。

编辑:这是2015年,所以也许不要使用脊柱和要求更多。试一试Webpack并做出反应!但是绝对不要使用Jquery手机,除非您需要更多这样的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10636266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档