関連している:
この記事は、私のブログの一部としてここにあります。
解決
まず最初に、jQMページのイベントとそのフローを理解する必要があります。
$(document).on('pageinit',function(){
$.mobile.loading( 'show' );
});
確かに次の代わりになります:
$(document).ready(function () {
$.mobile.loading('show');
});
ただし、jQMページはいくつかのフェーズで構成されています。あなたの場合、スピナーを表示できるようにするには、pageshowイベントを使用する必要があります。スピナーを表示できるようにするには、ページを表示する必要があります。私はあなたのために例を作成しました:http://jsfiddle.net/Gajotres/Nncem/。その中でスピナーを見るために次のページに行きます。pageshowをpageinitに置き換えて、違いを確認することもできます。
次のコードを使用する必要があります。
$(document).live('pageshow', function (e, data) {
$.mobile.loading('show');
});
しかし、これは正しい方法ではありませんが、jQMの最良の方法は次の構文を使用することです。
$('div[data-role="page"]').live('pageshow', function (e, data) {
$.mobile.loading('show');
});
または、単一のページにバインドする場合は、次を使用します。
$('#pageID').live('pageshow', function (e, data) {
$.mobile.loading('show');
});
ここで、pageIDはページのIDです。
$(document).on('pageinit')vs $(document).ready()
jQueryで最初に学ぶことは、 $(document).ready()関数内のコードを呼び出して、DOMがロードされるとすぐにすべてが実行されるようにすることです。ただし、jQuery Mobileでは、ナビゲートするときにAjaxを使用して各ページのコンテンツをDOMにロードします。このため、$(document).ready()は最初のページが読み込まれる前にトリガーされ、ページ操作を目的としたすべてのコードはページの更新後に実行されます。これは非常に微妙なバグである可能性があります。一部のシステムでは正常に動作しているように見える場合がありますが、他のシステムでは、不規則で、繰り返しの奇妙さを引き起こす可能性があります。
従来のjQuery構文:
$(document).ready() {
});
この問題を解決するために(そして私を信じてこれが問題である)、jQueryMobile開発者はページイベントを作成しました。一言で言えば、ページイベントは、ページ実行の特定のポイントでトリガーされるイベントです。これらのページイベントの1つはpageinitイベントであり、次のように使用できます。
$(document).on('pageinit', function(){
});
さらに進んで、ドキュメントセレクターの代わりにページIDを使用できます。IDインデックスを持つjQueryMobileページがあるとしましょう:
<div data-role="page" id="index">
<div data-theme="a" data-role="header">
<h3>
First Page
</h3>
<a href="#second" class="ui-btn-right">Next</a>
</div>
<div data-role="content">
<a href="#" data-role="button" id="test-button">Test button</a>
</div>
<div data-theme="a" data-role="footer" data-position="fixed">
</div>
</div>
インデックスページでのみ使用できるコードを実行するには、次の構文を使用できます。
$('#index').on('pageinit', function(){
});
Pageinitイベントは、ページがロードされて初めて表示されるたびに実行されます。ページを手動で更新するか、ajaxページの読み込みをオフにしない限り、再度トリガーされることはありません。ページにアクセスするたびにコードを実行する場合は、pagebeforeshowイベントを使用することをお勧めします。
これが実際の例です:http://jsfiddle.net/Gajotres/Q3Usv/この問題を示します。
この質問に関するメモはもう少しあります。1つのhtml複数ページまたは複数のhtmlファイルパラダイムを使用しているかどうかに関係なく、すべてのカスタムjavascriptページ処理を単一の個別のjsファイルに分割することをお勧めします。これにより、コードがさらに改善されますが、特にjQuery Mobileアプリケーションを作成している間は、コードの概要が大幅に改善されます。
別の特別なjQueryMobileイベントもあり、これはmobileinitと呼ばれます。jQueryMobileが起動すると、ドキュメントオブジェクトでmobileinitイベントがトリガーされます。デフォルト設定を上書きするには、それらをmobileinitにバインドします。mobileinitの使用法の良い例の1つは、ajaxページの読み込みをオフにするか、デフォルトのajaxローダーの動作を変更することです。
$(document).on("mobileinit", function(){
//apply overrides here
});