Подтвердить что ты не робот

Как инициализировать страницы в jQuery mobile? Не показывать

Каков правильный способ инициализации объектов на мобильной странице jquery? docs говорят, что использовать "pageInit()" без примеров этой функции, но привести примеры привязки к методу "pageinit" (разница в заметке), Однако на этой простой тестовой странице я вообще не вижу, чтобы событие срабатывало:

<html>
 <body>  
  <script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>  
  <script type="text/javascript" charset="utf-8" src="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js"></script>

  <div data-role="page" id="myPage">
    test
  </div>

  <script>
    $("#myPage").live('pageinit',function() {
        alert("This never happens");
    });
  </script>
 </body>
</html>

Что мне не хватает? Я должен добавить, что если вы меняете pageinit на другое событие, например pagecreate, этот код работает.

---- UPDATE ----

Эта ошибка отмечена как "закрытая" в трекер JQM. По-видимому, мнения различаются по поводу того, работает ли это нормально или нет.

4b9b3361

Ответ 1

Он начал работать, когда я ввел script в страницу div:

<body>
    <div id="indexPage" data-role="page">
        <script type="text/javascript">
            $("#indexPage").live('pageinit', function() {
                // do something here...
            });
        </script>
    </div>
</body>

Используется jQuery Mobile 1.0RC1

Ответ 2

.live() устарел, рекомендуется использовать .on() в jQuery 1.7+:

<script type="text/javascript">
    $(document).on('pageinit', '#indexPage',  function(){
        // code 
    });
</script>

Обратитесь к онлайн-документу за дополнительной информацией о .on(): http://api.jquery.com/on/

Ответ 3

Оказывается, это ошибка в 1.0b3, которая исправлена ​​в текущей голове. Итак, если вы хотите исправить сейчас, вам нужно взять последнюю версию git. Или подождите следующего релиза.

Ответ 4

jQuery(document).live('pageinit',function(event){
    centerHeaderDiv();
    updateOrientation();
    settingsMenu.init();
    menu();
    hideMenuPopupOnBodyClick(); 
})

Теперь это работает. Теперь все переходы на страницы и все функции JQM AJAX будут работать вместе с вашими определенными функциями javascript! Наслаждайтесь!

Ответ 5

pageinit не будет срабатывать, если он находится на вторичных страницах (НЕ ГЛАВНАЯ страница), если он написан общим <script> тег...

У меня такая проблема - на вторичных страницах, которые не загружаются с помощью 'rel= "external", код в общем <script> тег никогда не выполняется...

действительно этот код всегда выполняется...

<body>
    <div id="indexPage" data-role="page">
        <script type="text/javascript">
            $("#indexPage").live('pageinit', function() {
                // do something here...
            });
        </script>
    </div>
</body>

если вы создали "интерфейс с вкладками", лучше использовать "pagehow"

Ответ 6

Мне пришлось поместить script в раздел HTML-страницы, который для меня является ошибкой. Он загружается обычно в браузере (а не через AJAX) и все на одной странице, включая javascript. Мы не должны использовать документ в готовом виде.

Ответ 7

Самый простой способ, с которым я столкнулся, это использовать JQM + Steal. Он работает как шарм, пока вы кладете:

<script type='text/javascript' src='../steal/steal.js?mypage'></script>

Внутри data-role='page' div.

Затем используйте AJAX для подключения всего, что может использовать тот же mypage.js, и используйте внешнюю ссылку (с помощью тега rel="external") во все, что требует другой страницы кражи.

Ответ 8

@Wojciech Bańcer

Из документов jQuery:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().

Ответ 9

Попробуйте следующее:

$('div.page').live('pageinit', function(e) {
    console.log("Event Fired");
});

Ответ 10

$(document).on("pageinit", "#myPage", function(event) {
   alert("This page was just enhanced by jQuery Mobile!");
});

Ответ 11

События не запускаются на начальной странице, только на страницах, которые вы загружаете через Ajax. В приведенном выше случае вы можете просто:

<script>
  $(document).ready(function() {
      alert("This happens");
  });
</script>