2012-03-16 63 views
2

在jquery mobile中,有没有办法取消在pagebeforeshow事件中显示的页面?我在pagebeforeshow上有一些权限检查代码,如果没有满足权限,我想引导用户登录页面。jquery mobile取消pagebeforeshow事件

$("secretpage").live("pagebeforeshow", function() { 
    if (permissionNotMet()) { 
    stopShowingPage()   // <---- how? 
    $.mobile.changePage("#signin") 
    } 
}) 
+0

好问题,我给了它几分钟的乱搞,我无法在转换到重定向页面之前取消初始页面转换。 – Jasper 2012-03-16 18:41:34

+0

我同意我应该把代码放在登录步骤中。我只是觉得在实际页面上进行权限检查是明智的做法。 – Clark 2012-03-16 22:17:53

+0

'pagebeforeload'可以被取消,所以如果你检查用户是否有'pagebeforeload'的正确权限,你可以取消页面加载和将用户重定向到登录页面。我很确定这个事件只在浏览外部页面时触发,但我不确定。 – Jasper 2012-03-16 22:46:28

回答

0

这并不是你所要求的,但是你可以重新设计你的代码的流程以使你更容易。

处理提交自己的登录表单,然后直接基于服务器响应用户到正确的页面:

$(document).delegate('#login', 'pageinit', function() { 
    function loginSuccess (serverResponse) { 

     $.mobile.hidePageLoadingMsg(); 

     //here you check the `serverResponse` and direct the user where they need to go 
    } 
    function loginError (jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     console.log(textStatus); 
     console.log(errorThrown); 
    } 
    $(this).find('form').bind('submit', function() { 

     $.mobile.showPageLoadingMsg(); 

     $.ajax({ url : '<url>', data : $(this).serialize(), success : loginSuccess, error : loginError }); 
     return false; 
    }); 
}); 

您还需要为属性添加data-ajax="false"<form>标记,以便jQuery Mobile不会为您处理提交内容。