我正试图在此事件绑定中触发我的函数 panelTrans :
$(document).on( "pagebeforechange", function( e, data ) {
console.log("fired");
// cond
if ( data.options.pageContainer != $.mobile.pageContainer ) {
if ( self.options.$infinity != "block" ) {
// set a blocker to avoid infinite loop
self.options.$infinity = "block"
// stop JQM
e.preventDefault();
e.stopPropagation();
// fire panel transition
self.panelTrans(e, data);
}
}
});
问题是,panelTrans函数触发changePage,触发另一个pagebeforechange事件,所以我正在创建一个inifinte循环。我试图用inifite循环选项阻止它。然而,这似乎并没有阻止“快”,因为我仍然得到几个“迭代/循环”=控制台正在记录3-5“被解雇”。如果我将preventDefault移到if语句之外,它会阻止所有内容,这也无效。
问题:
有没有更好的方法来处理这个?我需要在Jquery Mobile之前拦截changePage,然后转换为覆盖changePage选项并触发我修改的changePage以便Jquery Mobile执行。
感谢您的帮助!
答案 0 :(得分:0)
什么是self
以及panelTrans
做了什么?
当然,您可能会获得多个“已解雇”的记录,因为它不在条件限制内。特别是当循环被阻止时,它仍然会记录新事件。
您是否尝试过记录panelTrans()
的执行情况?
答案 1 :(得分:0)
您应该检查data.toPage
上的类型,并且只在toPage是字符串时取消该事件。
对$.mobile.changePage()
的调用应该是页面对象。
这是我为另一个问题做的一个例子。 http://jsfiddle.net/kiliman/zMnUM/
$(document).bind('pagebeforechange', function(e, data) {
var to = data.toPage;
if (typeof to === 'string') {
var u = $.mobile.path.parseUrl(to);
to = u.hash || '#' + u.pathname;
e.preventDefault();
e.stopPropagation();
// call $.mobileChangePage() here,
// make sure it's a page object like $('#page')
}
});