2012-05-17 205 views
2

我的index.html是這樣的:jQuery Mobile「mobileinit」事件觸發兩次?

<!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 Mobile的,只有指數一樣。

我app.js文件看起來像這樣:

$(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(); 
    }); 
}); 

東西是造成 「手機初始化」 開火兩次。我不確定它是什麼,或者即使它確實是一個問題,但它感覺應該不會發生。
有沒有辦法解決這個問題?

編輯
其實我只是注意到,如果我把一個簡單的「腳本」標籤直接進入體內,並做了那裏的console.log,它運行兩次.... SOOO ....這個東西代碼正在導致我的整個頁面被初始化兩次。
實際上,它看起來好像我的整個設置加載了兩次。我將console.logs放在應用程序第一次加載時發生的事情的鏈條上,並且所有事情都發生了兩次。

+0

看看這些可能的解決方案: 1. http://stackoverflow.com/questions/9836112/jquerymobile-script-runs-twice-on-each-pageload 2. HTTP://計算器。 com/questions/7024388/jquery-mobile-duplicated-events –

+0

不幸的是,這些工作都沒有。我的腳本全部在,我添加了dom-data-cache屬性並清除了我的緩存(甚至在一個完全不同的瀏覽器中嘗試過,我從來沒有加載該頁面),它仍然會觸發兩次事件。 –

回答

1

我遇到過類似的事情。對於它的價值,這是多麼解決它:

$(document).bind("mobileinit", function() { 
    $.extend( $.mobile , { 
    autoInitializePage: false, 
    loadingMessage: false 
    }); 
}); 

如果我不得不去適應它代碼,你可以試試:

$(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()函數。根據他們自己的docs

從jQuery 1.7開始,不推薦使用.live()方法。使用.on()附加事件處理程序。老版本jQuery的用戶應優先使用.delegate()而不是.live()

+0

這確實解決了我的問題....你能解釋爲什麼嗎?我是一個漂亮的Javascript程序員,並沒有真正的線索,你的代碼實際上是在做什麼,我討厭不理解我使用的代碼。 –

+0

我剛剛意識到這段代碼也阻止了我的其他代碼加載。 : - \ –

1

這可能不是您想要聽到的答案,但我相信這確實是我能爲您提供的最有幫助的建議。

我強烈建議您儘可能地去掉Jquery mobile。我最近在一個問題出現問題的團隊中工作,這個問題與Jquery mobile有關。如果您在加載頁面時發生任何異步代碼,幾乎不可能讓Jquery mobile的事件與您自己的頁面同步。

如果您需要爲您的移動網站提供無縫的本地感受,我強烈建議嘗試使用Spine和RequireJS。根據您的設計限制,Spine Mobile也可用,並將爲您完成一些工作。

jquery mobile基本上欺騙了瀏覽器,認爲你的網站是一個單頁面的應用程序,並且因爲它而感覺非常笨重。如果您有足夠的時間備份並做對,並真正構建一個真正的單頁應用程序,那麼您將得到更乾淨,更可靠的代碼以及更實用的應用程序。

溝渠jquery移動。你的開發團隊和你的用戶會感謝你。


編輯:這是2015年,所以也許不使用脊柱和要求了。嘗試Webpack和反應!但絕對不要使用Jquery mobile,除非你想要更多這樣的問題。

+2

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Blackwood

+0

我明白你在說什麼@Blackwood,通常我會這麼做,但這需要成爲這個問題的真正答案。開除Jquery手機肯定會解決他們的問題,而且老實說是最好的解決方案。 –