そのための JQM 開発者からのプラグインがあることをご存知でしょう: JQM ページネーション
あなたの問題は複数のバインディングに関連していると思います。
すべてのバインドにaconsole.log
を追加して、起動する頻度を確認します。そのようです:
$('body').live('pagecreate', function(event) {
console.log( "PAGECREATE fired")
$('div[data-role="page"]').live("swipeleft", function() {
console.log("binding to swipe-left on "+$(this).attr('id') );
var nextpage = $(this).next('div[data-role="page"]');
// swipe using id of next page if exists
if (nextpage.length > 0) {
$.mobile.changePage(nextpage);
}
});
$('div[data-role="page"]').live("swiperight", function() {
console.log("binding to swipe-right "+$(this).attr('id');
var prevpage = $(this).prev('div[data-role="page"]');
// swipe using id of previous page if exists
if (prevpage.length > 0) {
$.mobile.changePage(prevpage, {
reverse : true,
});
}
});
});
これらが複数回発生する場合は、スワイプごとにイベントを発生させたい場合に、スワイプでall
トリガーされる複数のバインディングをページに添付します。changePage
one
EDIT:
まず、最新のJqueryを使用している場合は、使用してバインドし、もうon/off
使用しないでlive
ください。1 つの方法は、ページがリロードされたときにunbind
onpagehide
と re-を実行することです。bind
おすすめの方法かと思います。ただし、次のページにスワイプするときに DOM からページを削除していない場合は、バインドが解除され、再度pagecreate
起動しないため (ページは DOM 内に残っているため、作成する必要はありません)、bind
スワイプバックしても再度起動しません。
私もこれをよく扱っており、これを使用しています:
$(document).on('pageshow', 'div:jqmData(role="page")', function(){
var page = $(this), nextpage, prevpage;
// check if the page being shown already has a binding
if ( page.jqmData('bound') != true ){
// if not, set blocker
page.jqmData('bound', true)
// bind
.on('swipeleft.paginate', function() {
console.log("binding to swipe-left on "+page.attr('id') );
nextpage = page.next('div[data-role="page"]');
if (nextpage.length > 0) {
$.mobile.changePage(nextpage);
}
})
.on('swiperight.paginate', function(){
console.log("binding to swipe-right "+page.attr('id');
prevpage = page.prev('div[data-role="page"]');
if (prevpage.length > 0) {
$.mobile.changePage(prevpage, {
reverse : true,
});
};
});
}
});
これは everypageshow
で起動し、ページが であるかどうかを確認しますbound
。そうでない場合は、このページにバインディングを設定します。次回pageshow
発火時bound
は真なので再バインドしません。ページが DOM から削除されて再読み込みされた場合、 はbound
設定されず、バインディングはリセットされます。
.paginate
左スワイプ/右スワイプにも追加したので、一度にそれらをすべて削除できますoff