本文转自: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的生命周期的更多相关文章

  1. MVC4中重复使用JQuery Mobile Dialog的做法实践.

    第一步:建立mobile项目类型 第二步:添加针对对话框的的DialogController.cs: 建立这个Controller的目的是此Dlg可以反复使用,把它做成一个固定界面,其他的Contro ...

  2. Android生命周期里你也许不知道的事

    Android生命周期预计连刚開始学习的人都再熟悉只是的东西了,但这里我抛出几个问题.也许大家曾经没有想过或者可能认识的有些错误. 一.当A启动B时,A和B生命周期方法运行的先后顺序是如何的?当按返回 ...

  3. go mobile 得生命周期事件

    生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件.所以我们可以看到 lifecycle.Event 的定义如下:   生命周期一共有下面四个阶段: lifecycle.StageDead ...

  4. Dialog式的Activity(AndroidActivity生命周期)

    概述 和普通的Activity跳转稍微不同的是,当第1个Activity跳转到第二个Activity后,如果点击'back'按钮(即Android键盘的按钮,则不会调用调用第一个Activity的on ...

  5. riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期

    前文回顾 riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法 riot.js教程[一]简介 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可 ...

  6. Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期

    先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级. 核心代码: onCreated中: Resources resources ...

  7. activity dialog生命周期

    Android生命周期包括以下几个状态: onCreate(Bundle savedInstanceState):可以进行一些初始化的工作在activity第一次被创建的时候调用.这里是你做所有初始化 ...

  8. 野心勃勃的React组件生命周期

    当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件    React实现了UI=Fn(St ...

  9. jQuery Mobile页面返回无需重新get

    最近公司的web app项目,使得我有幸一直接触和学习jQuery Mobile.这确实是一个很不错的移动开发库,有助于擅长web开发的工程师,快速入门并构建自己的移动应用.但是在前两天,我碰到了一个 ...

随机推荐

  1. iOS CocoaPods安装与使用

    1.MAC安装Ruby环境 1>  安装RVM 控制台命令:$curl –L https://get.rvm.io | bash –s stable $source ~/.rvm/scripts ...

  2. TinkerPop中的遍历:图的遍历步骤(2/3)

    24 Group Step 有时,所运行的实际路径或当前运行位置不是计算的最终输出,而是遍历的一些其他表示.group()步骤(map / sideEffect)是根据对象的某些功能组织对象的一个方法 ...

  3. win10系统遇到的问题解决

      1.win10 计算器提示:需要新应用打开此calculator 运行calc,会出现需要新应用打开此Calculator,打开应用商店,找到计算器,仍然可以被使用,我怀疑是我自己在清理PC的注册 ...

  4. socket socket讲解

    socket  socket讲解 一.socket是何物? 参考百度百科: http://baike.baidu.com/link?url=4YNURsJLEaL0II79C68gPUoYKliXWJ ...

  5. JAVA学习第三篇Boolean

    Boolean是布尔值. 布尔值只有两个值:真和假.写作:true false. 那么如何使用呢? 最简单的用法: public class demo{ public static void main ...

  6. 网络模拟工具Clumsy

    Clumsy 是一款小巧而功能强大的开源弱网模拟工具,它能在windows平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况下的表现. 你可以选择 clumsy 提供的功能来有目的性的调 ...

  7. Internet路由-主机路由表和转发表

    1.路由表 路由信息最终要存储在用于路由器的主机或者专业路由器上,存放这些信息的地方称为路由表.其中包含三元素:目标地址,掩码,下一跳. 1.1.查询路由表的开销 有人认为查询路由表是一件和交换机查询 ...

  8. Hystrix线程隔离技术解析-线程池(转)

    认识Hystrix Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离.信号量隔离.降级策略.熔断技术. 在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有 ...

  9. BZOJ 3028: 食物

    \(\color{#0066ff}{ 题目描述 }\) 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮 ...

  10. vue 学习一

    这个是很早之前公司要使用vue.js时候学习记在有道云笔记上的,发觉那个笔记贼多了,没办法,觉得是要换个地方存笔记了, 一vue.js的使用: 可以在页面是直接使用: <!DOCTYPE htm ...