Comment initialiser les pages dans jquery mobile? pageinit pas tirer

Quelle est la bonne façon d’initialiser des objects sur une page mobile jquery? Les documents d’événement indiquent d’utiliser ” pageInit() ” sans exemples de cette fonction, mais donnent des exemples de liaison à la méthode ” pageinit ” (remarquez la différence de casse). Cependant, je ne vois pas l’événement du tout dans cette simple page de test:

     
test
$("#myPage").live('pageinit',function() { alert("This never happens"); });

Qu’est-ce que je rate? Je devrais append que si vous modifiez pageinit en un autre événement comme pagecreate ce code fonctionne.

—- METTRE À JOUR —-

Ce bogue est marqué comme “fermé” dans le tracker de problème JQM. Apparemment, les avis divergent quant à savoir si cela fonctionne correctement ou non.

Il a commencé à fonctionner lorsque j’ai incorporé le script dans la page div:

  

JQuery Mobile 1.0RC1 utilisé

.live() est obsolète, la suggestion est d’utiliser .on() dans jQuery 1.7+:

  

Consultez le document en ligne pour plus d’informations sur .on() : http://api.jquery.com/on/

Il s’avère que c’est un bogue dans 1.0b3 qui est corrigé dans la tête actuelle. Donc, si vous voulez un correctif maintenant, vous devez récupérer le dernier de git . Ou attendez la prochaine version.

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

Cela fonctionne maintenant. Maintenant, toutes les transitions de page et toutes les fonctionnalités de JQM AJAX fonctionneraient avec vos fonctions JavaScript définies! Prendre plaisir!

pageinit ne se déclenche pas si elle est sur des pages secondaires (page NOT MAIN) si elle est écrite dans la balise

J'ai un tel problème - sur les pages secondaires qui ne sont pas chargées avec 'rel = "external"', le code dans la balise

vraiment ce code est toujours exécuté ...

  

bien que si vous avez fait "interface à tabs", l'utilisation de "pageshow" est mieux

J’ai dû mettre le script dans la section de page HTML qui est pour moi un bogue. Il est chargé normalement dans un navigateur (pas via AJAX) et le tout sur une seule page, y compris javascript. Nous ne sums pas censés avoir à utiliser le document prêt.

La façon la plus simple de résoudre ce problème était d’utiliser JQM + Steal. Cela fonctionne comme un charme aussi longtemps que vous mettez:

  

À l’intérieur du div data-role='page' .

Ensuite, utilisez AJAX pour connecter tout ce qui peut utiliser le même mypage.js et utiliser un lien externe (en utilisant la balise rel="external" ) pour tout ce qui nécessite une page de vol différente.

@Wojciech Bańcer

À partir des documents 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(). 

Essaye ça:

 $('div.page').live('pageinit', function(e) { console.log("Event Fired"); }); 
 $(document).on("pageinit", "#myPage", function(event) { alert("This page was just enhanced by jQuery Mobile!"); }); 

Les événements ne se déclenchent pas sur la page initiale, uniquement sur les pages que vous chargez via Ajax. Dans le cas ci-dessus, vous pouvez simplement: