2016-10-07 2 views
0

У меня есть мобильное приложение jquery с некоторыми страницами. первая страница - это страница входа в систему, и после входа пользователя в систему я не хочу, чтобы пользователь снова возвращался на страницу входа в систему.jquery mobile toPage select атрибут не работает

после того, как будет показан пользователь, зарегистрированный в div с именем #map.

, чтобы предотвратить это иметь следующий код:

$(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 идентификатор теста

+0

toPage API Doc: Это свойство представляет собой страницу, которую хочет сделать активный абонент. Это может быть либо объект коллекции jQuery, содержащий элемент страницы DOM, либо абсолютный/относительный URL-адрес для внутренней или внешней страницы. Значение точно соответствует первому аргументу для вызова changePage(), вызвавшего событие. Console.log ui.toPage, чтобы узнать, что это такое ... – ezanker

+0

Привет, он дает мне объект jquery так же, как я бы выбрал его так: $ ('# login'). Attr ('id'); но test.attr ('id') дает мне ошибку. – Julez

ответ

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 ("идентификатор"): http://api.jquery.com/prop/

+0

Привет, спасибо, похоже, это работает, но если я нажму кнопку «Назад» в браузере дважды, он перезагрузит страницу, и все мои данные ajax исчезнут. Есть идеи ? – Julez

Смежные вопросы