我有一个带有一些页面的jquery移动应用程序。第一页是登录页面,用户登录后我不希望用户再次返回登录页面。
用户登录后,将显示名为#map的div
。
以防止这有以下代码:
$(document).on('pagecontainerbeforechange', function (e, ui) {
var activePage = $(':mobile-pagecontainer').pagecontainer('getActivePage');
if(activePage.attr('id') === 'map') {
var test = ui.toPage;
console.log(test.attr('id');
// if(test.attr('id') === 'login' && login.status === true) {
// console.log('you are alrady logged in');
// e.preventDefault();
// e.stopPropagation();
// }
}
});
当我点击上一页再次转到登录页面时,我收到此错误:Uncaught TypeError: test.attr is not a function
出了什么问题,如何选择attr
测试ID
答案 0 :(得分:1)
有时ui.toPage是一个字符串,有时它是表示页面的jQuery对象。有时,pagecontainerbeforechange会运行两次,一次使用字符串,一次使用对象。所以试试这个:
$( document ).on( "pagecontainerbeforechange", function( e, ui ) {
var from = ui.prevPage ? ui.prevPage.prop("id") : '';
var to = '';
if (typeof ui.toPage === 'string') {
var u = $.mobile.path.parseUrl(ui.toPage);
to = u.hash || '#' + u.pathname.substring(1);
} else {
to = '#' + ui.toPage.prop("id");
}
if (from === 'map' && to === '#login') {
alert('Cannot change to login from map');
e.preventDefault();
// remove active class on button
// otherwise button would remain highlighted
$.mobile.activePage
.find('.ui-btn-active')
.removeClass('ui-btn-active');
}
});
此外,.attr(“id”)也可以,但在较新版本的jQuery中使用.prop(“id”)更为正确:http://api.jquery.com/prop/