我遇到一个问题,即pagechange处理程序在我的应用程序中针对某些页面转换触发了两次。 在deviceready处理程序中:
$(document).bind("pagechange", onPageChange);
然后是徒手:
var onPageChange = function (event, data) {
var fromPageId = null;
//Get the ID of the page we are transitioning to.
var toPageId = data.toPage.attr("id");
//Get the ID of the page we are coming from.
if (data.options.fromPage) {
fromPageId = data.options.fromPage.attr("id");
}
console.log("pagechange to " + toPageId + " from " + fromPageId);
switch (toPageId){
...
}
}
当应用程序从一个页面转换到下一个页面时,我可以在LogCat中看到onPageChange正在触发两次:
01-26 18:49:50.490: I/Web Console(18244): pagechange to care-plan-view from care-plan-view:25
01-26 18:49:50.490: I/Web Console(18244): pagechange to care-plan-view from care-plans:25
这是他们在日志中出现的顺序,奇怪的是护理计划视图是目标页面,护理计划是起始页面!
这是一个导致页面转换问题的示例链接:
<a data-role="button" data-icon="arrow-r" data-iconpos="right" href="#care-plan-view?id=9e273f31-2672-47fd-9baa-6c35f093a800&name=Sat"><h3>Sat</h3></a>
为什么会发生这种情况的任何想法?
干杯, 唐
答案 0 :(得分:1)
pagechange
事件发生两次的原因是由于在 changePage
中进行递归调用,而toPage不是jQuery增强型DOM对象。
此递归很危险,因为允许开发人员更改事件中的toPage。如果开发人员在 pagechange
事件处理程序中始终将toPage设置为字符串,则无论它是否为对象,都会产生无限递归循环。
pageload
事件将新页面作为数据对象的页面属性传递(这应该添加到文档中,当前未列出)。因此, pageload
事件可用于访问已加载的页面。
简而言之,这种情况正在发生,因为您通过 pageChange
发送了其他参数。
要解决此问题,请选择另一个页面事件,例如:
event pagebeforecreate
event pagecreate
event pageinit
event pagebeforehide
event pagebeforeshow
event pageremove
event pagehide
event pageshow
有关此问题的更多信息,请访问我的博客 ARTICLE ,只需搜索以下章节:防止多个事件触发。或者你可以找到 HERE 。