我试图在多页面html网页中理解jquery移动页面事件。
当我尝试导航到index1.html中的window2时,页面事件正在被触发并且正在发生转换。
但是,如果我尝试在index1.html和index3.html之间导航,则不会触发index3.html的页面事件并且正在进行页面转换。
当我尝试向index3.html href添加data-ajax =“false”时,page3.html的页面事件被触发。然而,转变并未发生。
有人可以帮助我理解 1)为什么事件没有被解雇? 2)使用data-ajax =“false”的问题以下是我尝试在
之间导航的页面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>
答案 0 :(得分:2)
所以一些简单的解释.....
1)事件最有可能是解雇,你只是看不到输出。这很常见,您应该尝试使用不同的事件来确保使用正确的事件。通过jsfiddle发布一些代码,我们可以帮助您调试它。
2)如果关闭ajax链接,你实际上是关闭ajax转换,你只需加载页面就像直接访问它一样。如果你像这样加载页面,你会看到预期的结果,它证明了页面事件正在被触发。
在这里查看有关事件触发顺序的一些解释;
http://jqmtricks.wordpress.com/2014/03/26/jquery-mobile-page-events/
答案 1 :(得分:2)
这称为单页模型,而非多页。
当JQM使用Ajax Navigation在页面之间切换时,当您调用外部页面时,例如Index2.html,它会在该页面中加载第一个data-role=page
并忽略所有其他标记。
因此,要解决第一个问题,您需要将该页面的JS代码放在data-role=page
中以便在页面中加载。
使用data-ajax=false
或rel=external
时,会阻止JQM通过Ajac加载页面,而是通过HTTP加载,作为加载了所有标记的新页面。这就是为什么il事件有效的原因。