6

Android と Web でうまく動作する Phonegap & jQuery Mobile アプリを用意しました。iOS では、ほとんどのアプリのプロセスのハンドラーをバインドする document.pageinit イベントが 2 回発生するという事実が原因であると思われる、予期しない結果が得られます。

いいえ、2回バインドしませんでした。いいえ、document.ready は使用しませんでした。はい、スクリプトの早い段階で、他の関数内ではなく、ドキュメントにバインドしました。

$(document).on('pageinit',function(event){
    alert(' Pageinit on document');
    //Some more code
})

初めて起動したとき、スプラッシュ画面はまだ表示されています。この時点で、XCode を使用して MacBook Pro でテストしている間、コンソールは利用できません。console.log を使用した場合、上記のメッセージはコンソールに表示されませんでした。

2 回目は、jQueryMobile が最初のページを作成した直後に起動します。

この二重発射の原因は何ですか?どうすればよいですか?

編集:後で、pageinit が 2 回目の起動ではなく、新しい data-role='page' div を開くたびに起動することに気付きました。以下の私の答えを見てください。

4

4 に答える 4

15

ゾルタンの回答に感謝します。場合によっては関連する可能性がありますが、それが原因ではありませんでした。

$(document).on('pageinit')jQuery Mobile アプリで使用されるすべてのページ遷移に対して発生します。これは、HTML リンクと を使用している場合の両方で発生します$.mobile.changePage();

衝撃的なことに、ドキュメントはこれについてどこにも言及していません。後続のすべてのページで起動するとは言及せずに使用することをお勧めします。

彼らがこの問題のある例を有効な$(document).ready().

複数のコードの実行を避けるために、.bind() または on() の代わりに .one() を使用してバインドするようにアドバイスする必要があります。

于 2012-09-26T15:46:58.007 に答える
2

本文を編集し<body data-role="page">て問題を解決してください。

于 2012-10-20T16:22:56.910 に答える
2

jqueryとjquery mobileを一緒に使っていると思うからです。しかし、解決策は簡単です。試す

$(document:not(.processed)).addClass('processed').on('pageinit',function(event)

これで解決するはず

于 2012-09-26T09:15:47.930 に答える
0

私はその問題にあまりにも長い間苦しんでいたので、他の人と共有することはできませんでした. また、iOSだけでなくAndroidでも問題があると思います(私の場合はちらつきが発生しました)。

「pageinit」イベントは、リクエストが行われるたびに 2 回呼び出されました。最初のものは提供された URL のデータを取得するためのもので、別のものは新しいページが DOM にロードされた後に呼び出されました (ドキュメントに動的に挿入された jQueryMobile ページ)。この問題を解決するための解決策は他にもあると思います。

$(document).ready(function(){
    $(this).delegate("#page-selector", "pageinit", function(ev, data){}); 
    // I don't know why the line has to be present, but otherwise does not work
});

そして、私の HTML ドキュメントは次のようになります。

<html>
<head>...here goes scripts...</head>
<body>
   <div id="#page-selector"> <!-- just wrapper -->
       <div data-role="page">
        ... content...
       </div>
   </div>
</body>
</html>

他の人のために貴重な時間を割いてくれることを願っています!

于 2012-11-07T23:04:21.067 に答える