JQuery Mobile - невозможно привязать pagebeforechange к id страницы?

Я мог только привязывать pagebeforechange ко всему мобильному документу jquery, а не к отдельной странице. Может ли кто-нибудь объяснить, почему это не работает?

Ответы

Ответ 1

$("div[data-role='page']").live( "pagebeforehide", function( event ) {
alert('This alert should trigger before Next Page Here is shown?');
});

(подробнее см. ссылку ) вы также можете использовать bind вместо live, надеюсь, что это помогло.

Ответ 2

С jQuery Mobile - я уверен, что вы не привязываетесь к документу, а к свойству pageinit.

Привязка к документу создаст проблемы... имейте в виду, что эта ссылка для работы над #home снова вам понадобится еще один прослушиватель событий для beforepageshow или что вы еще до того, как страница будет показана снова.

Этот документ очень полезен...

Ответ 3

Селектор для страниц JQM:

$('.ui-page')

Добавление прослушивателя событий на все страницы документа может быть выполнено как:

$(document).delegate(".ui-page","pagebeforehide", function(evt, ui){
   alert('pagebeforehide fired');
}

С помощью делегат:

Примечание: использование привязки вместо delegate НЕ будет работать для вышеупомянутого селектора, так как класс ui-страницы добавляется только при создании страницы.

В целях использования привязки используйте следующий селектор:

$("div[data-role='page']")

И добавьте прослушиватель событий (только после того, как документ готов или тело загружено):

$("div[data-role='page']").bind("pagebeforehide", function(evt, ui{
alert('pagebeforehide fired');
}

Скрипт с использованием bind:

Я также рекомендую использовать событие mobileinit, а документ готов!

Ответ 4

У меня такая же проблема, но у меня, по крайней мере, есть обход для вас. Предупреждение: это глупый, ужасный код. Но он выполняет эту работу.

window.doubleLoadPreventer = 0;

$(document).bind('pagebeforechange', function(e, data){

    if ( window.doubleLoadPreventer === 1 ) {
        window.doubleLoadPreventer = 0;
        return;
    } else {
        window.doubleLoadPreventer = 1;
    }

    //your normal event handler code here
}