J'ai un seul fichier pour chaque page et j'essaie de mettre en œuvre le gestionnaire d'événements de page sur chaque page (je pense que ce qui appartient strictement à une page, devrait être déclaré là), comme indiqué ci-dessous:
<body> <div id="myPage" data-role="page"> <!-- Content here --> <script type="text/javascript"> $("#myPage").live('pageinit', function() { // do something here... }); </script> </div> </body>
5 Réponses :
Je pense que c'est probablement préférable de déplacer votre code JavaScript dans un autre fichier comme pendant que vous naviguez autour de votre site JQuery Mobile May Nettoyage (Lire: Supprimer de DOM) que C'est essentiellement pourquoi ils suggèrent d'utiliser le code> ou Toutefois, si vous insistez sur votre code placé sur une page par page que d'utiliser ref: http://jquerymobile.com/demos/1.0/ Documents / pages / page-cache.html p>
JQuery Mobile a donc un mécanisme simple pour garder le Dom Nardy. Chaque fois qu'elle charge une page via AJAX, JQuery Mobile Flags la page à supprimer de la DOM lorsque vous naviguez à l'abri ultérieurement (techniquement, sur l'événement de page). P>
blockQuote> MyPage doit donc devra charger Encore une fois et de l'Hens Rerun que le même bloc de code que vous avez défini et liez 2 auditeurs pour l'événement
pageInit code>. p>
ou
sur code>. Cependant, il tombe si vous incluez le code de liaison sur la page;) P>
lid code> au lieu de
live p>. p>.
Et où devrais-je appeler le fichier JavaScript?
Dans un fichier JS commun qui est chargé dans le cadre de votre tête?
Et ce fichier s'appellera une seule fois, car JqueryMobile n'exécutera pas le fichier dans l'en-tête, car l'en-tête n'est demandé qu'une seule fois, non?
également bon à utiliser $ (document) .Delegate ('# inspecter-page', 'pageInit', fonction () {}); b> au lieu de $ (document) .on ( 'PageImit'); B> Le plus tard semble tirer plus d'une fois
Une solution de contournement rapide que j'ai utilisée est de déclarer une variable contenant la fonction de gestionnaire.
$( "#myPage" ).die( handler ).live( handler );
Je résolvez le problème en faisant passer le nom de l'événement, dans ce cas la "pageInit" au lieu du gestionnaire.
<script defer="defer" type="text/javascript"> var supplier = null; $("#pageID").die("pageinit"); //<--- this is the fix $("#pageID").live("pageinit", function(event){ console.log("initialized - @(ViewBag.ID)"); supplier = new Tradie.Supplier(); supplier.Initialize("@(ViewBag.ID)");
C'est une vraie douleur dans le cul que cela m'a fallu 2 jours d'enfer pour trouver ceci. Espérons que je suis dans le clair ...
$("#page1").live("pageinit", function () { alert('pageinit'); $("#page1").die("pageinit"); //<--- prevent from firing twice on refresh });
Je suis sûr qu'ils recommandent de recommander une page de liaison au document à l'aide de (). E.G.
$(document).on ('pageinit', '#myPage', function (event) {