嗨(我可能没有正确地这样做) - 当我尝试使用“changePage()”加载页面作为对话框时,我正试图导航到我的JQuery Mobile(JQM)应用程序中的页面时出现问题。我环顾四周,尝试了一些没有运气的替代方案:(
E.g。我有一个登录页面,可以作为应用程序init上的对话框成功打开:
$.mobile.changePage(page, {transition: 'pop', role: 'dialog' });
登录界面有一个登录按钮,当按时向前移动到正常(非对话)页面时,再次成功并再次使用changePage:
$.mobile.changePage( page );
当我再次尝试在对话框中加载登录页面时(例如,在注销时),会出现问题。我有一个注销按钮,点击后会导航回登录页面:
$.mobile.changePage(page, {transition: 'pop', role: 'dialog' });
但是这次我在JQM lib中得到以下异常:“Uncaught TypeError:无法调用方法'indexOf'未定义”
以下是一些重新创建问题的示例代码:
<script type="text/javascript">
$(function() {
createPage("login");
});
function createPage( pageStr ) {
var page = $("<div id='pageWrapper' class='pageWrapper' data-role='page' ></div>");
var header = createHeader( pageStr );
var content = createContent( pageStr );
page.append(header, content);
$("body").append( page );
if(pageStr == "login") {
$.mobile.changePage(page, {transition: 'pop', role: 'dialog' });
}
else {
$.mobile.changePage( page );
}
}
function createHeader( pageStr ) {
var headerContainer = $("<div id='header' class='header' data-role='header' data-position='fixed'></div>");
if(pageStr != "login") {
var logOutButton = $("<a onclick='logout()' class='ui-btn-right' data-rel='dialog'>Logout</a>");
headerContainer.append(logOutButton);
}
var headerTitle = $("<h1>Page: " + pageStr + "</h1>");
headerContainer.append(headerTitle);
return headerContainer;
}
function createContent( pageStr ) {
var contentDiv = $("<div id='content' class='content' data-role='content'></div>");
var contentBuilder = $("<div></div>");
if(pageStr == "login") {
contentBuilder.append(createloginForm());
}
else {
contentBuilder.append(createWrapper());
}
contentDiv.append(contentBuilder);
return contentDiv;
}
function createloginForm() {
var form = $("<form id='loginForm' method='post'></form>");
var loginButton = $("<p><input type='button' value='Login' onclick='login()'></input></p>");
form.append(loginButton);
return form;
}
function createWrapper() {
var tmpText = $("<h2>some content ...</h2>");
return tmpText;
}
function login() {
createPage("main")
}
function logout() {
createPage("login"); // pages[0] = login page
}
</script>
谢谢, 乔恩。
答案 0 :(得分:0)
感谢您的评论 - 我没有在示例中提及/包含我每次都清理页面因此没有添加重复的元素或ID(任何时候只添加/呈现一个页面)。 / p>
我认为我已经通过在挂起之前手动初始化页面来解决问题 - 不确定它是否是“更合适”的修复,但似乎有效:
在调用changePage()方法之前,我需要先初始化新页面:E.mobile.initializePage();
再次感谢, 乔恩。