[转]Jquery Mobile dialog的生命周期
本文转自:http://www.cnblogs.com/jackhuclan/archive/2012/04/05/2432972.html
- JQuery Mobile对htm5的移动开发绝对是个好用的东西,今天简单谈谈JQuery Mobile中的dialog的使用。
- .对话框的弹出。
- .对话框的生命周期。
- .对话框内事件的注册。
- )第一个问题:对话框的弹出。
- 如果要弹出一个对话框,可以在页面中添加一个按钮
- <a href="dialog.htm" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">Open dialog</a>
- 再看看dialog.htm的内容,注意对话框是个单独的页面,jquery mobile将以Ajax方式加载到事件触发的页面,因此dialog.htm页面不需要Header,content,footer之类的文档结构,以下代码就是全部dialog.htm的内容
- 复制代码
- <div data-role="dialog" id="aboutPage">
- <div data-role="header" data-theme="d">
- <h1>
- Dialog</h1>
- </div>
- <div data-role="content" data-theme="c">
- <h1>
- Delete page?</h1>
- <p>
- This is a regular page, styled as a dialog. To create a dialog, just link to a normal
- page and include a transition and <code>data-rel="dialog"</code> attribute.</p>
- <a href="#" data-role="button" data-rel="back" data-theme="b" id="soundgood">Sounds
- good</a> <a href="demo.htm" data-role="button" data-rel="back" data-theme="c">Cancel</a>
- </div>
- </div>
- 复制代码
- 这样当点击Open Dialog之后就会弹出这个对话框了。弹出对话框的形式有多种,大家可以参考http://jquerymobile.com/。
- )第二个问题:对话框事件的生命周期。
- 当我们弹出一个对话框后,我们可能需要再它的不同的生命周期中去注册不同的回调函数或事件,因此理解各个事件的顺序是很有必要的。
- 复制代码
- $(document).bind("pagebeforeload", function (event, data) {
- alert('1.pagebeforeload!');
- });
- $('#aboutPage').live('pagebeforecreate', function (event) {
- alert('2.This page was just inserted into the dom!pagebeforecreate!!!');
- })
- $('#aboutPage').live('pagecreate', function (event) {
- alert('3.pagecreate!');
- $("#soundgood").attr("demo.htm");
- $("#soundgood").click(function () {
- alert("soundgood");
- });
- });
- $('#aboutPage').live('pageinit', function (event) {
- alert('4.This page was just enhanced by jQuery Mobile!pageinit!!!');
- });
- $(document).bind("pageload", function (event, data) {
- alert('5.pageload!');
- });
- $('#aboutPage').live('pageshow', function (event) {
- alert('6.pageshow!');
- });
- $('#aboutPage').live('pageremove', function (event) {
- alert('7.pageremove!');
- });
- $('#aboutPage').live('pagehide', function (event) {
- alert('8.pagehide!');
- });
- 复制代码
- 看到上面代码,相信大家一目了然了。对对话框事件的绑定用live或bind,解除绑定用die,或unbind。另外大家可以在事件pagecreate中看到对话框事件的注册。切记,只有在对话框创建后注册的事件才是有用的,也就是说如果你事先在Open dialog按钮所在的页面给dialog里面的元素注册的事件是没用的,因为dialog是后来以Ajax加载进去的。具体原理请参看官方文档。
- )第三个问题:对话框事件的注册。
- 上面我已稍微提及。为了避免打乱Open Dialog 所在页面(就叫主页面吧)的文档结构。你可以有两种做法,第一种将Open Dialog的样式设为none,将其隐藏。
- <a href="dialog.htm" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">Open dialog</a>
- 第二种做法是,添加一个javascript函数,来动态往Dom结构中添加这样一个链接,这样你可以随时调用这个函数来打开一个对话框,注意回调函数的写法
- 复制代码
- //options has properties: href,transition
- //if you need callback method, you must add options.dialog parameter
- openDialog: function (options) {
- var href = options.href || "about:blank";
- var transition = options.transition || "none";
- $('body').append("<a id='tPushDialog' href='" + options.href + "' data-rel=\"dialog\" data-transition=\"" + options.transition + "\" style='display:none;'>Open dialog</a> ");
- $("#tPushDialog").trigger('click');
- $('body').find('#tPushDialog').remove();
- $("#" + options.dialog).live('pageshow', function (event) {
- if (typeof options.callback == 'function')
- options.callback();
- });
- }
- 复制代码
- 另外一个要注意的问题是有的人注册的事件会响应多次,比如在第二个问题中给Sound Good注册的事件会响应多次,你或许感到很奇怪。其实是因为你每次文档加载的时候,你都给这个按钮注册了一个click事件,所以会弹出多次。正确的做法是,给dialog中的元素添加事件时,先unbind再bind。下面给大家一个例子。
- 复制代码
- <script type="text/javascript">
- function show() {
- Utils.openDialog({
- href: "MessageDialog.htm",
- dialog: "MessageDialog",
- callback: function () {
- $("#btnOk").unbind("click").bind("click", function () {
- alert("test");
- $("#MessageDialog").dialog("close");
- });
- }
- });
- }
- </script>
- 复制代码
- 再看看MessageDialog.htm的文档结构
- 复制代码
- <div data-role="dialog" id="MessageDialog" style="z-index: 999">
- <div data-role="header" data-theme="b">
- <div class="dialog_title1">
- Message Received</div>
- <input type="hidden" id="hiddenMessageId" />
- </div>
- <div data-role="content" data-theme="b">
- <div style="margin: 10px 5px 10px 5px;">
- <span id="spanMessage" style="font-weight: bold"></span>
- </div>
- <div id="messageContent">
- <ul style="margin-left: 5px;">
- <li>
- <input type="button" data-inline="true" id="btnOk" value="Yes" data-rel="back" />
- <input type="button" data-inline="true" id="Button1" value="No" data-rel="back" />
- </li>
- </ul>
- </div>
- </div>
- </div>
- 复制代码
- 大家慢慢体会,:)
- 作者:Jackhuclan
- 出处:http://jackhuclan.cnblogs.com/
- 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
[转]Jquery Mobile dialog的生命周期的更多相关文章
- MVC4中重复使用JQuery Mobile Dialog的做法实践.
第一步:建立mobile项目类型 第二步:添加针对对话框的的DialogController.cs: 建立这个Controller的目的是此Dlg可以反复使用,把它做成一个固定界面,其他的Contro ...
- Android生命周期里你也许不知道的事
Android生命周期预计连刚開始学习的人都再熟悉只是的东西了,但这里我抛出几个问题.也许大家曾经没有想过或者可能认识的有些错误. 一.当A启动B时,A和B生命周期方法运行的先后顺序是如何的?当按返回 ...
- go mobile 得生命周期事件
生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件.所以我们可以看到 lifecycle.Event 的定义如下: 生命周期一共有下面四个阶段: lifecycle.StageDead ...
- Dialog式的Activity(AndroidActivity生命周期)
概述 和普通的Activity跳转稍微不同的是,当第1个Activity跳转到第二个Activity后,如果点击'back'按钮(即Android键盘的按钮,则不会调用调用第一个Activity的on ...
- riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期
前文回顾 riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法 riot.js教程[一]简介 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可 ...
- Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期
先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级. 核心代码: onCreated中: Resources resources ...
- activity dialog生命周期
Android生命周期包括以下几个状态: onCreate(Bundle savedInstanceState):可以进行一些初始化的工作在activity第一次被创建的时候调用.这里是你做所有初始化 ...
- 野心勃勃的React组件生命周期
当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件 React实现了UI=Fn(St ...
- jQuery Mobile页面返回无需重新get
最近公司的web app项目,使得我有幸一直接触和学习jQuery Mobile.这确实是一个很不错的移动开发库,有助于擅长web开发的工程师,快速入门并构建自己的移动应用.但是在前两天,我碰到了一个 ...
随机推荐
- Python--面向对象编程--时钟实例开发
在学习python面向对象编程的时候,心血来潮,决定写一个时钟模型来玩玩,所以就有了现在这个小玩意,不过python这个东西确实是挺好玩的 方法:运用python的tkinter库开发图形化时钟程序 ...
- UNIX和Linux信号
1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号).不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失 ...
- [转]Marshaling a SAFEARRAY of Managed Structures by P/Invoke Part 2.
1. Introduction. 1.1 In part 1 of this series of articles, I explained how managed arrays may be tra ...
- shell脚本实现自动保留最近n次备份记录
项目中出现的问题 某天上午服务器出现卡顿特别严重,页面加载速度奇慢,并且某些页面刷新出现404的问题,就连服务器的tab命令的自动提示都出现了问题,楼主费了九牛二虎之力,根据服务器排查发现,服务器数据 ...
- 温故而知新_C语言_递归
递归. 是的,差不多就是这种感觉.上面就是类似递归的显示表现. 2017 10 24更新: 递归这个问题放了很久.也没有写.大概是自己还没有好好理解吧. 在这里写下自己理解的全部. 一 何为递归. 字 ...
- 工欲善其事——Sublime Text
一直在找mac下顺手的代码编辑器,要求能方便地查找和编辑,最好能再集成调试,最后选择了sublime.用了一段时间emacs,但是学习曲线过于陡峭.尤其是眼下的要务是啃代码时,玩弄emacs有点舍本逐 ...
- CHSaveData
NSData数据 NSStream文件流 NSCache缓存 SQLite NSFileManager文件管理 NSUserDefaults数据存储 PList数据存储 NSKeyedArchiver ...
- 启动HBase脚本start-hbase.sh时报Class path contains multiple SLF4J bindings.解决方法
1. 使用start-hbase.sh启动HBase时报Class path contains multiple SLF4J bindings.错误,原因是jar包冲突导致的.所以,对于和Hadoop ...
- luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛
link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...
- 13.Convert BST to Greater Tree(将树转为更大树)
Level: Easy 题目描述: Given a Binary Search Tree (BST), convert it to a Greater Tree such that every k ...