問題は、次の pesueo-page 要素ではなく、次の DOM 要素を選択しようとしていることです。DOM のロード後に最後のページを追加しているため、実際には別の要素の後に追加されています (.next()
疑似ページの代わりにこの他の要素を選択しています)。
私が変更され:
$(this).next("div:jqmData(role='page')");
$(this).prev("div:jqmData(role='page')");
に:
$(this).nextAll("div:jqmData(role='page')").first();
$(this).prevAll("div:jqmData(role='page')").first();
前/次の疑似ページをすべて選択してから、それらの最初のページだけを選択します。
ここにデモがあります:http://jsfiddle.net/UurQC/2/
スワイプ イベントのイベント ハンドラーを委任しない場合、スワイプ イベント ハンドラーは、動的に配置された疑似ページに対して実行されません。これを修正する方法は次のとおりです。
$(document)
.on("swipeleft", "div:jqmData(role='page')", function(){
var $nextPage = $(this).nextAll("div:jqmData(role='page')").first();
// swipe using id of next page if exists
if ($nextPage.length > 0) {
$.mobile.changePage($nextPage, { transition: 'slide' });
}
})
.on("swiperight", "div:jqmData(role='page')", function(){
var $prevPage = $(this).prevAll("div:jqmData(role='page')").first();
// swipe using id of next page if exists
if ($prevPage .length > 0) {
$.mobile.changePage($prevPage, { transition: 'slide', reverse : true });
}
});
そして、ここにデモがあります: http://jsfiddle.net/UurQC/3/
アップデート
DOM の外観と、上記が必要な理由は次のとおりです。
<div data-role="page" id="text_0" data-url="text_0" tabindex="0" class="ui-page ui-body-c ui-page-active" style="min-height: 452px; "></div>
<div data-role="page" id="text_1" data-url="text_1"></div>
<div data-role="page" id="text_2" data-url="text_2"></div>
<script type="text/javascript">...</script>
<div data-role="page" id="text_3" data-url="text_3"></div>
<div class="ui-loader ui-corner-all ui-body-a ui-loader-default"></div>
これは完全な HTML ではなく、<body>
要素の直接の子のみであることに注意してください。
JSFiddle が JS コードを<script>
タグに追加した後、動的に作成された疑似ページが DOM に追加されることに注意してください。これは、jQuery Mobile が初期化時にローダー要素を追加するため、JSFiddle で実行しない場合にも問題になります。