jQuery Mobile: запустите метод javascript на новой странице

#javascript #jquery #html #jquery-mobile #mobile-website

#javascript #jquery #HTML #jquery-mobile #мобильный-веб-сайт

Вопрос:

У меня есть приложение, которое позволяет пользователям выигрывать призы. Чтобы выиграть приз, им нужно перейти на страницу, подобную этой: www.myUrl.com#isAWinner где #isAWinner находится моя мобильная страница. Я беспокоюсь, что кто-то подумает о том, чтобы просто ввести этот URL и перейти непосредственно на страницу победителя, фактически не выиграв. Чтобы исправить это, я попытался сделать это:

 <!-- Show this if the user is a winner -->
<div id = "isAWinner" data-role = "page">
    <p>YOU WIN!!!</p>
    <!-- Invisible link -->
    <a href = "#beforeLogin" id = "goBack" class = "InvisibleLinks"></a>
    <!-- Ensures that the user does not just enter #isAWinner to the end of the URL -->
    <script type="text/javascript"> reallyAWinner()</script>
</div>

function reallyAWinner () {
    alert(isAWinner);
    //Check to see if they really are a winner
    if (isAWinner == false) {
        //Not really a winner. Send back to login
        $('#goBack').click();
    }
}
  

Проблема в том, что alert отображается при начальной загрузке страницы, но если я попытаюсь перейти к этому URL afterwords, то метод больше не отображается.

Я не понимаю, как работает jQuery mobile? Попадет ли он в этот reallyAWinner() метод только при загрузке всей HTML-страницы, а не при загрузке isAWinner страницы? Если да, то есть ли другой способ, которым я могу проверить, действительно ли пользователь является победителем, только при загрузке isAWinner страницы?

Редактировать: вот немного больше информации. Когда я изначально ввожу метод без загрузки первой страницы, предупреждение в reallyAWinner() будет срабатывать перед предупреждением, которое у меня есть в моем document.ready методе, из-за чего $('#goBack').click(); не будет работать (потому что мобильное устройство не загружено)

Ответ №1:

Если вы включили вызовы метода ajax, функция reallyAWinner() будет вызвана при вызове вашей начальной страницы.

Что вы можете сделать, чтобы вызвать вашу функцию reallyAWinner() только при загрузке страницы #isAWinner вы можете зарегистрировать событие «pageshow» в идентификаторе вашей страницы.

Итак, вы можете сделать следующее:

 $('#isAWinner').live('pageshow', function () { reallyAWinner();  });
  

Из документации jQueryMobile:

 pageshow: Triggered on the page being shown, after its transition completes.
  

Комментарии:

1. Спасибо. Это заставило его загрузить метод при загрузке этой страницы. Еще один вопрос. Я отредактировал этот метод, чтобы он содержал это: $.mobile.changePage('#beforeLogin'); где beforeLogin — идентификатор страницы, на которую я хочу их перенаправить. Когда метод выполняется, этот вызов не будет работать, но когда я копирую и вставляю эту строку в firebug, он действительно работает. Я что-то там упускаю?

2. Я думаю, вам нужно написать $.mobile.changePage($(‘#beforeLogin’)) в качестве первого аргумента, который принимает changePage, — это страница jQuery.