jquery mobile toPage select属性不起作用

时间:2016-10-07 09:46:12

标签: javascript jquery jquery-mobile

我有一个带有一些页面的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

1 个答案:

答案 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');
   }                
});

DEMO

此外,.attr(“id”)也可以,但在较新版本的jQuery中使用.prop(“id”)更为正确:http://api.jquery.com/prop/