1

少し面倒なことを見つけたので、あからさまに間違ったことをしていないことを確認したいと思います。jquery-mobile 1.4 を使用しています。

ダイアログとしてモデル化された dialogpage.html を呼び出す mainpage.html があります。ダイアログページには <div data-role="page" id="dialogpage" data-dialog="true"> があります。

ダイアログページには、次のようにdivページに添付されたpageshowイベントもあります

$(document).on('pageshow', '#dialogpage', function(event) {
  console.log('pageshow dialogpage');
});

私が見つけたのは、このダイアログページを開くたびに、追加の pageshow イベントが呼び出されることです。これが意味することは、ダイアログを初めて開いたときに、コンソールに「pageshow dialogpage」が 1 回出力されるということです。ダイアログを 2 回目に開くと、ダイアログが 2 回表示されます。ページを 3 回目に開くと、3 回印刷されます。

ページを開くたびに、pageshow イベントが何度も追加されているようです。ある意味、これは理にかなっていますが、対処するのはかなり面倒に思えます。

私の解決策は、次のようなバインド解除イベントを追加することです。

$(document).on('pagehide', '#dialogpage', function(event) {
    console.log('pagehide dialogpage');
    $(document).unbind('pageshow');
    $(document).unbind('pagehide');
  });

これにより、「pageshow dialogpage」が複数回印刷されるのを防いでいるようです。しかし、これは、ダイアログ ページ内のすべてのイベントをアンバインドする必要があるということですか?

私は何か間違ったことをしていますか?

4

1 に答える 1

0

イベントをオンにバインドしているので、オフでバインドを解除します。また、フィルター (#dialogpage) も指定します。

$(document).off('pageshow','#dialogpage');
$(document).off('pagehide','#dialogpage');

アップデート:

ああ、DOM からダイアログを削除しますか?

于 2014-05-09T07:10:31.723 に答える