2014-04-25 2 views
1

J'essaie de comprendre les événements de page mobile jquery dans une page Web html multipage. Lorsque j'essaie d'accéder à window2 dans le fichier index1.html, les événements de la page sont déclenchés et la transition est en cours.Les événements de page ne sont pas déclenchés lors de la navigation entre les pages de fichiers Web html multipages

Toutefois, si j'essaie de naviguer entre index1.html et index3.html, les événements de page de index3.html ne sont pas déclenchés et la transition de page est en cours. Lorsque j'ai essayé d'ajouter data-ajax = "false" à index3.html href, les événements page de page3.html sont en train d'être déclenchés. Cependant, la transition ne se produit pas.

Quelqu'un peut-il m'aider à comprendre 1) Pourquoi les événements ne se déclenchent-ils pas? 2) questions à l'aide de données ajax = "false"

Voici les pages que je suis en train de naviguer entre

index1.html:

<!DOCTYPE html> 
<html> 
<head> 
    <meta name=viewport content="user-scalable=no,width=device-width" /> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> 
</head> 
<body> 
<div data-role="page" id="home"> 
    <div data-role="header"> 
    <h1>Home</h1> 
    </div> 
    <div data-role="content"> 
    <p> Window content 1 </p> 
    <a href="#win2"> Window 2 (into the DOM) </a> 
    <br /><br /> 

    <a href="index3.html" data-transition="pop" > 
      Window 3 in index3.html (data-dom-cache=false) </a> 
    <br /><br /> 


    <br /><br /> 
    </div> 
</div> 
<div data-role="page" id="win2" data-add-back-btn="true"> 
    <div data-role="header"> 
    <h1>Window 2</h1> 
    </div> 

    <div data-role="content"> 
    <p> Window content 2 </p> 
    </div> 
</div> 
</body> 
</html> 

    $(document).bind ("pagebeforeload", function (event, data) 
{ 
    alert ("pagebeforeload data.url = " + data.url); 
}); 

$(document).bind ("pageload", function (event, data) 
{ 
    alert ("pageload data.url = "); 
}); 

$(document).bind ("pageloadfailed", function (event, data) 
{ 
    alert ("pageloadfailed data.url = " + data.url); 
}); 


$("#home").on ("pagebeforecreate", function (event) 
{ 
    alert ("pagebeforecreate id=" + this.id); 
}); 

$("div:jqmData(role=page)").on ("pagecreate", function (event) 
{ 
    alert ("pagecreate id=" + this.id); 
}); 

$("div:jqmData(role=page)").on ("pageinit", function (event) 
{ 
    alert ("pageinit id=" + this.id); 
}); 


$("div:jqmData(role=page)").bind ("pagebeforeshow", function (event, ui) 
{ 
    alert("pagebefore show"); 

}); 

$("div:jqmData(role=page)").bind ("pageshow", function (event, ui) 
{ 
    alert("pageshow"); 

}); 

$("div:jqmData(role=page)").bind ("pagebeforehide", function (event, ui) 
{ 
     alert("pagebeforehide"); 
}); 

$("div:jqmData(role=page)").bind ("pagehide", function (event, ui) 
{ 
     alert("pagehide"); 
}); 



**index3.html** 

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv=Content-Type content=text/html;charset=iso-8859-1 /> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> 
</head> 

<body> 

<div data-role="page" id="win3" data-add-back-btn="true"> 
    <div data-role="header"> 
    <h1>Window 3</h1> 
    </div> 

    <div data-role="content"> 
    <p> Window content 3 </p> 
    </div> 
</div> 

</body> 
</html> 
<script> 
$("div:jqmData(role=page)").bind ("pagebeforeshow", function (event, ui) 
{ 
    alert("pagebefore show3"); 

}); 

$("div:jqmData(role=page)").bind ("pageshow", function (event, ui) 
{ 
    alert("pageshow3"); 

}); 

$("div:jqmData(role=page)").bind ("pagebeforehide", function (event, ui) 
{ 
     alert("pagebeforehide3"); 
}); 

$("div:jqmData(role=page)").bind ("pagehide", function (event, ui) 
{ 
     alert("pagehide3"); 
}); 



</script> 
+1

Si nous avons été utiles, vous pourriez peut-être accepter l'une de nos réponses. Merci. –

Répondre

2

Ceci est appelé seule page Modèle, non multipage.

Comme JQM utilise Ajax Navigation pour basculer entre les pages, lorsque vous appelez une page externe, par ex. Index2.html, il charge d'abord data-role=page dans cette page et il néglige toutes les autres balises. Par conséquent, pour résoudre votre premier problème, vous devez placer le code JS de cette page à data-role=page pour être chargé dans la page. Lorsque vous utilisez data-ajax=false ou rel=external, vous empêchez JQM de charger la page via Ajac et de charger à la place via HTTP une nouvelle page avec toutes les balises chargées. C'est pourquoi il fonctionne.

+0

des événements sont déclenchés lorsque j'ai écrit les événements dans data-role = "page". Mais est-ce la façon standard de faire cela? Idéalement, nous devrions écrire tout le func func avant le data-role = "page". Merci de me guider sur les meilleures pratiques. – user1401443

+1

N ° Code va à l'intérieur de la 'page' Tout ce qui est en dehors de data-role = page est ignoré après la première page. –

+0

donc je suppose ici après d'inclure les événements de la page et les scripts à l'intérieur de data-role = "page". Merci pour le soutien. – user1401443

2

donc une explication simple ..

1) Les événements se déclenchent très probablement et vous ne voyez pas la sortie. C'est assez commun, vous devriez essayer d'utiliser différents événements pour vous assurer que vous utilisez le bon. Publiez du code via jsfiddle et nous pouvons vous aider à le déboguer.

2) Si vous désactivez ajax pour un lien, vous désactivez les transitions ajax et vous chargez la page comme si vous y accédiez directement. Si lorsque vous chargez la page comme ceci, vous voyez les résultats attendus, cela prouve que les événements de la page se déclenchent.

Jetez un oeil ici pour une explication de l'ordre dans lequel les événements se déclenchent;

http://jqmtricks.wordpress.com/2014/03/26/jquery-mobile-page-events/

+0

alors que j'essaie de naviguer entre plusieurs modèles de pages uniques, il se peut que je ne puisse pas publier le code dans le guide jsfiddel for debugging.Pls. – user1401443

+0

Il n'y a rien que tout le monde puisse faire alors. –

+0

des événements sont déclenchés lorsque j'ai écrit les événements dans data-role = "page". Mais est-ce la façon standard de faire cela? Idéalement, nous devrions écrire tout le func func avant le data-role = "page". Est-ce le moyen idéal pour déclencher des événements? Merci pour le soutien. – user1401443

Questions connexes