1

jQueryMobileを使用してモバイルアプリケーションを作成しています。順調に進んでいますが、解決できない大きな問題が1つあります。

複数のページ(data-role = page)を持つ単一のindex.htmlがあります。パラメータを渡すので、JavaScriptでクリックイベントを使用してこれらのページを呼び出します。ページは、(パラメーターに基づいて)jsonファイルから作成された(ライブpagebeforeshow)リストビューで構成されます。たとえば、カテゴリページで特定のカテゴリをクリックすると、そのIDが次のページに渡され、このカテゴリのサブカテゴリが新しいリストに表示されます。

奇妙なことに、戻るボタンをクリックしたとき、またはダイアログを閉じたときに、そのページまたはそのダイアログを開いたクリックイベントが自動的に再度トリガーされることがよくあります。たとえば、リスト内のアイテムをクリックします。クリックイベントにより、ダイアログがポップアップ表示されます。ダイアログを閉じると、リスト(前のページ)が再ロードされ、クリックイベントが再びトリガーされたかのように、ダイアログがすぐに再びポップアップします...非常に奇妙です。

私は見当もつかない。

これは、ブラウザにjsonを取得して必要なものを表示するように指示するために使用するイベントの例です。

$('#dialog_zin_nl').live('pagebeforeshow', function(event, data) {

*ここに、適切なjsonのものを取得し、それをhtmlに追加するなど、このページで発生する必要のあるすべてのコードがあります...

その後(この「pagebeforeshow」内)ボタンクリックイベントを次のように宣言します

$("#execute_sub_rubriek").on("click", ".selected_zin_nl", function(event){
                    var selected_zin_nl  = $(this).attr('selected-zin-nl');
                    $.mobile.changePage( "#dialog_zin_nl?current_rubriek=" + current_rubriek_id + "&current_sub_rubriek=" + current_sub_rubriek_id + "&current_zin=" + selected_zin_nl + "", { role: "dialog"} );
                  });

誰かがこれと同じ問題に遭遇したか、何が悪いのかを知っている場合。説明してください。

ありがとう!

編集pageinitを使用する場合、この問題は発生しません。たとえば、ユーザーが別のカテゴリを選択したときにページのコンテンツを更新する必要があるため、pageinitを使用することはできません。

私の考え:ページが戻るボタンで呼び出された場合はpageinitを呼び出し、別のボタンでページが呼び出された場合はpagebeforeshowを呼び出すことはできますか?

4

1 に答える 1

2

onイベントpagebeforeshowにリスナーを追加pageshowしています。ページに戻ると が発生するため、2 番目 onのリスナーが追加されます。そのため、コードの動作がおかしくなっています。

あなたpageinitとコードを分離する必要があります.pageinitはページを初期化するだけpageshowであるべきだと慎重に考えてください.pageshowはページが表示されるたびに呼び出さonれます.pageinit一度起こります。

これは、jQM サイトで JS をクリーンアップした方法を強調する同様の質問へのリンクです何がいつ起動し、何がいつ実行されるか。

于 2012-10-04T22:57:10.613 に答える