页面跳转:
页面跳转时pagebeforechange事件会被触发两次,通过$(document).bind("pagebeforechange", handleChangePage);来绑定pagebeforechange事件的触发函数handleChangePage(e,data),第一次 触发时data.toPage是到达页面的url,类型是string。第二次触发时data.toPage是e.fn.e.init[1](搞不懂具体 是什么东西)。
第二次触发时可以获取到达页面的信息,因此可以在第二次触发时来增加自己的操作,也就是if(typeof data.toPage != “string”).这时可以用e.target.baseURI来获取到达页面的uri,类型是string,然后就可以分析出参数等一些东西。
利用e.target.find(“pageId”)来获取到达页的相应元素加以控制。
“get”方式提交时可以直接解析e.target.baseURI来获取参数
“post”方式提交时可以分析data.options.data来获取参数。也可以在changePage里利用$(“form”).serializeArray()转换为JSON对象(这种方式比较好)或者$(“form”).serialize()转换成字符串。
如果发生中文乱码问题,可以尝试使用decodeURIComponent(str)进行解码。
代码实例:
index.html
<!DOCTYPE html>
<html class="ui-mobile">
<head>
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">
<meta charset="utf-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script>
<script type="text/javascript" charset="utf-8">
$( document ).delegate("#index", "pageinit", function() {
$(document).bind( "pagebeforechange", beforechange);
});
function beforechange( e, data ) {
if ( typeof data.toPage != "string" ) {
var url = $.mobile.path.parseUrl(e.target.baseURI),
re = /a.html/;
if(url.href.search(re) != -1){
var page = $(e.target).find("#a2");
var d = data.options.data;
page.find("#s").append(decodeURIComponent(d));
}
}
}
</script>
</head>
<body>
<div data-role="page" id="index">
<div data-role="header">.header.</div>
<div data-role="content">
<a href="dir1/a.html?p1=112&p2=113">a.html</a><br>
<div id="ccc"><a href="#c" id="cc">cccccc</a><br></div>
<a href="dir2/b.html" data-rel="dialog" data-transition="pop">Open dialog</a>
<form action="a.html" method="post">
姓名:<input type="text" value="23" name="name"/><br>
密码:<input type="text" value="过后" name="pwd"/><br>
<input type="submit" value="submit"/>
</form>
</div>
<div data-role="footer" data-position="fixed">footer</div>
</div>
</body></html>
a.html
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">
<meta charset="utf-8">
<link rel="stylesheet"
href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script>
</head>
<body>
<div data-role="page" id="a2" >
<div data-role="header">
.header.
</div>
<div data-role="content">
<a href="../dir2/b.html" >b.html</a>
<br>
<a data-rel="back" href="b.html">back</a>
<div id="s"></div>
</div>
<div data-role="footer" data-position="fixed">
footer
</div>
</div>
</body>
</html>
Jquerymobile加载页面相关知识:
如果采用ajax的方式链接到一个有多page的文档doc1,那么只会加载第一个page,这时就无法在这个page上链接到文档doc1上的其他page了。利用subpage插件可以实现多page文档的加载。
使用ajax方式来跳转到下一个文档时,由于jquerymobile框架的限制不会加载<div data-role=”page”></div>外面的js和css资源,所以把应当把js和css代码放到<divdata- role=”page”></div>里面。
Jquerymobile中推荐在捕获pageinit事件的函数中来操作page里的元素。例:
$( document).delegate("#aboutPage", "pageinit", function() {
alert('Apage with an ID of "aboutPage" was just created by jQuery Mobile!');
});
预加载页面
1、<ahref="prefetchThisPage.html"data-prefetch> ... </a>
2、$.mobile.loadPage(
pageUrl, { showLoadMsg: false } );
使用单一页面模式时,通过以上两种方式Jquerymobile会在主界面加载后在后台加载预加载的文件,同时会触发pagecreate事件。
这样能够流畅地转移到预加载的页面而不会显示加载的信息
缓存页面
保留所有访问过的页面
$.mobile.page.prototype.options.domCache = true;
缓存特定的页面
<div data-role="page" id="cacheMe" data-dom-cache="true">
pageContainerElement.page({ domCache: true });
Hash和Ajax页面驱动模型:
通过Ajax形式来跳转页面时,会触发hashchange 事件,jquerymobile在处理这个事件时会修改location.href的值。
Jquerymobile是通过给页面添加 "ui-page-active" 样式来设置显示的页面的。
pushState 插件:
jquerymobile利用 history.replaceState函数将基于hash的长的url转换为更加简洁的完整的文档地址。如果浏 览器不支持 history.replaceState,或者禁用了这一特性,地址栏就会显示基于hash的url(就是带#的url)。
Jquerymobile这时会触发hashchange事件,可以通过$(window).bind("hashchange",function(e){});来进行捕获
可以在文档完全加载前通过设置$.mobile.pushStateEnabled=false来禁用这一特性。
如果不支持ajax的导航模式,或者设置了 rel="external" 或$.mobile.ajaxEnabled=false,则建议禁用这一特性以获得更加连贯的行为。
小知识:
一、Jquery页面加载函数写法:
1)
$(document).ready(function(){
...
})
2)
$(function(){
...
})
二、jquerymobile中这种写法
(function(window, undefined ) {
...// code goes here
})(window)
前一个括号是声明一个函数,后面的括号是调用这个函数并传参。
函数带undefined参数的目的是防止在外部声明了undefined变量导致错误的引用。
三、使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
history.pushState():改变当前页面的URL,将URL放入浏览器历史里
history.replaceStat():将指定的URL替换当前的URL
如何调用
var state = {
title: title,
url: options.url,
otherkey: othervalue
};
window.history.pushState(state,document.title, url);
如何响应浏览器的前进、后退操作
window对象上提供了onpopstate事件,上面传递的state对象会成为event的子对象,这样就可以拿到存储的title和URL了。
window.addEventListener('popstate',function(e){
if (history.state){
var state = e.state;
//do something(state.url, state.title);
}
}, false);
这样就可以结合ajax和pushState完美的进行无刷新浏览了。
相关推荐
在 jQuery Mobile 中,页面可以通过链接(`<a>` 标签)进行跳转。使用 `data-rel="next"` 或 `data-rel="back"` 可以控制前进或后退。此外,`data-url` 属性用于指定页面的 URL,这对于多页面应用的书签和历史记录...
1. **默认行为**:在jQuery Mobile中,表单提交会触发页面跳转,但可以通过设置`data-ajax="true"`使表单提交变为AJAX请求。 2. **阻止默认行为**:如果需要自定义AJAX提交,可以使用`event.preventDefault()`阻止...
### 知识点一:jQuery Mobile页面加载机制 在jQuery Mobile中,页面跳转的机制不同于传统的全页面刷新。它采用的是基于 Ajax 的页面转换技术,也就是说,它并不是把整个页面内容加载到浏览器中,而是只把具有`data-...
**注意事项**:这段代码需要放置在引入 jQuery Mobile 库之前。 ### 如何去除 jQuery Mobile 自带的组件样式 #### 问题描述 有时候,开发人员可能希望去除 jQuery Mobile 提供的标准样式,以便实现自定义的设计...
- **页面**:解释如何使用jQuery Mobile创建动态页面,并通过数据属性控制页面间的过渡效果。 - **模态对话框**:一种特殊的页面,用于显示临时的信息或请求用户输入,常用于确认操作、提示消息等场景。 - **工具...
问题的背景是,在使用jQuery Mobile的页面跳转中,当从一个页面跳转到另一个页面,再返回原先页面时,期望能够不重新加载页面,而直接从缓存中获取,尤其是在具有复杂操作和数据处理的页面上。 在开发中,开发者们...
除了以上的基本事件,jQuery Mobile还提供了页面生命周期事件,如`pageinit`、`pagebeforechange`、`pagechange`等,这些事件在页面加载、切换时触发,方便我们进行动态内容的初始化和更新。 在使用jQuery Mobile...
### jQuery Mobile 开发入门知识点详解 #### 概述 jQuery Mobile 是一款用于构建适用于各种智能手机和平板电脑的 Web 应用程序的用户界面框架。它以其简洁高效的代码库著称,能够实现高度统一且品牌化的 Web 应用...
在 jQuery Mobile 中,由于它使用 AJAX 进行页面导航,页面不会完全刷新,导致页面上的 JavaScript 事件绑定在页面跳转后失效。这是因为默认情况下,jQuery Mobile 只会初始化加载时可见的页面元素。为了解决这个...
jQuery Mobile库提供了这些功能,但如果不使用整个库,也可以通过监听触摸事件自行实现。 在实际项目中,可能还需要考虑SEO优化,因为全屏滚动页面可能不利于搜索引擎爬虫抓取内容。可以采用AJAX加载和异步渲染技术...
总结起来,通过检测User Agent和媒体查询,我们可以编写JavaScript代码来判断用户是使用手机还是PC访问网站,然后根据设备类型进行页面跳转。然而,对于大多数现代网站来说,采用响应式设计来适应各种设备可能更为...
1. 自动适应设备宽度:jQuery Mobile中的页面和组件都是响应式的,这意味着它们会根据屏幕的宽度自动调整大小,以适应不同尺寸的设备。 2. 滑动切换大图:通过触摸屏幕进行左右滑动操作,用户可以在幻灯片之间进行...
在JQuery Mobile中,实现页面跳转非常简单,只需要在`<a>`标签的`href`属性中指定目标页面的ID即可。目标页面的`<div>`元素需要有`data-role="page"`属性,以便被框架正确识别。 此外,JQuery Mobile还提供了丰富的...
需要注意的是,虽然本文重点介绍了JQuery Mobile实现弹出式登录框的方法,但在实际开发中还需要考虑安全性问题,如防止XSS攻击、密码加密传输等。在前端实现登录功能时,通常需要后端配合进行用户身份验证。此外,...
本项目"HTML5app:基本JQueryMobile的iOS端HTML5网页"就是一个很好的实例,它结合了HTML5与JQuery Mobile库,实现了iOS设备上的网页应用。 首先,我们要理解HTML5的优势。HTML5提供了许多新的元素和API,如离线存储...
在网页设计中,焦点轮播幻灯片是一种常见的视觉展示手段,能够吸引用户注意力并高效地展示多张图片或信息。本篇文章将深入探讨如何利用jQuery库来实现左右切换的焦点轮播幻灯片,包括其核心原理、代码实现及关键技巧...
#### 三、技术细节及注意事项 1. **兼容性问题**: - 不同的移动设备和浏览器可能有不同的用户代理字符串格式,因此在编写检测逻辑时需要尽可能全面地考虑到各种情况。 - 特别需要注意的是,某些浏览器允许用户...
这样的处理可以帮助我们更好地控制资源加载和页面跳转。 以上就是使用jQuery Mobile库检测URL绝对地址和相对地址的方法介绍。掌握这两个方法将有助于开发者更加精确地控制前端应用中的URL处理逻辑,提升用户体验。
- 临时数据和页面跳转参数用 JS 全局变量存储。使用 `window.localStorage` 存储本地数据,需要本地数据库时,利用 PhoneGap 提供的封装。 9. **定位功能**: - PhoneGap 的定位 API 兼容性不佳,可以使用百度...