Jquery Mobile dialog的生命周期

JQuery Mobile对htm5的移动开发绝对是个好用的东西,今天简单谈谈JQuery Mobile中的dialog的使用。

1.对话框的弹出。

2.对话框的生命周期。

3.对话框内事件的注册。 

 

1)第一个问题:对话框的弹出。

        如果要弹出一个对话框,可以在页面中添加一个按钮

<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>
        <href="#" data-role="button" data-rel="back" data-theme="b" id="soundgood">Sounds
            good</a> <href="demo.htm" data-role="button" data-rel="back" data-theme="c">Cancel</a>
    </div>
</div>
复制代码

        这样当点击Open Dialog之后就会弹出这个对话框了。弹出对话框的形式有多种,大家可以参考http://jquerymobile.com/。

 

2)第二个问题:对话框事件的生命周期。

       当我们弹出一个对话框后,我们可能需要再它的不同的生命周期中去注册不同的回调函数或事件,因此理解各个事件的顺序是很有必要的。

复制代码
$(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加载进去的。具体原理请参看官方文档。

 

3)第三个问题:对话框事件的注册。

        上面我已稍微提及。为了避免打乱Open Dialog 所在页面(就叫主页面吧)的文档结构。你可以有两种做法,第一种将Open Dialog的样式设为none,将其隐藏。

<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>
复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本linux命令vi,基本linux和vi命令.pdf

基本linux和vi命令DETIBIHORP ___________________YLTCIR 附录 BTSSIR 基本的 Linux 和ETUP vi 命令 yM lO nC oS___________________I eH sT uM NOR OF IS TL AAI RR OET PA RMT OIK

集成Java内容仓库和Spring

JCR模块 Spring Modules的一部分&#xff0c;JCR模块的主要目标是&#xff1a;以一种类似Spring主分发包中ORM包的方式&#xff0c;简化使用JSR-170 API进行开发。特点如下&#xff1a; JcrTemplate&#xff0c;允许执行JcrCallback和异常处理&#xff08;将需检查的JCR异常转换…

jQuery Mobile弹出对话框后不刷新原页面,保持原页面内容不变

使用jQuery Mobile开发移动应用程序时&#xff0c;在一个页面上弹出对话框&#xff0c;关闭对话框后&#xff0c;发现原来的页面被刷新了。如果原页面上有一些已经选择或者填写的数据&#xff0c;则这些数据就会丢失。这时候&#xff0c;就需要对对话框的返回按钮做一些处理&am…

mpi4py linux例子,python-3.x – mpi4py中的共享内存

我使用MPI(mpi4py)脚本(在单个节点上),它与一个非常大的对象一起使用.为了让所有进程都可以访问该对象,我通过comm.bcast()分发它.这会将对象复制到所有进程并占用大量内存,尤其是在复制过程中.因此,我想分享像指针而不是对象本身.我发现memoryview中的一些功能对于增强进程内对…

c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...

个C语言源由I am interested in the training course, which _____ at Hilton Hotel in Beijing from March 8 to 12, 2018.程序成“万物莫不有对”体现了中国传统哲学的矛盾观。用户在进行产品的三维设计时&#xff0c;干函可以采用以下( )的设计方法。数组少意识是人脑对客观…

oracle的背景

oracle简介 1977年 美国人 Larry 成立软件开发实验室 。 1980年 用c/c开发了世界第一个商用关系型数据库&#xff08;RDBMS&#xff09;。 1983年 公司更名为Oracle Corporation&#xff08;甲骨文公司&#xff09;。 2009年4月21日&#xff0c;Oracle收购Sun公司。 30多…

Citrix Netscaler版本管理和选择

Citrix Netscaler版本管理和选择 来源 http://blog.51cto.com/caojin/1898164 随着Citrix Netscaler的快速发展&#xff0c;有很多人在维护设备时经常搞不懂Netscaler软件版本是如何查看和选择&#xff0c;当前软件是否需要升级&#xff0c;当前软件是否稳定等。基于以上问题&a…

树的基本操作代码 c语言,二叉树的基本操作(C语言、源代码)

二叉树的基本操作(源代码)#include "stdio.h"#include "malloc.h"#define MAX 100typedef struct node{int date;struct node *lchild,*rchild;}bitnode,*bitree;bitree createbitree(bitree bt){int m;printf("m");scanf("%d",&m…

oracle实例与数据库

一、名称 Oracle数据库服务器。单叫数据库或服务器都不全面。 二、组成 oracle数据库服务器由二部份组成&#xff1a;实例和数据库 实例&#xff1a; 可理解为对象&#xff0c;看不见。数据库&#xff1a; 理解为类&#xff0c;看得见的&#xff0c;E:\app\Administrator\…

1.Dao代码如何编写?

Dao代码如何编写&#xff1f; 1、操作xml数据。数据保存在xml文件里。2、使用jdbc技术。2.1、原始的jdbc操作&#xff0c;connection&#xff0c;statement&#xff0c;resultset。2.2、自定义一个持久层的框架&#xff0c;封装通用的dao操作方法。2.3、DbUtils组件&#xff0c…

WEB前端面试题汇总整理01

1.JS找字符串中出现最多的字符 例如&#xff1a;求字符串nininihaoa中出现次数最多字符 var str "nininihaoa"; var o {}; for (var i 0, length str.length; i < length; i) {var char str.charAt(i);if (o[char]) {o[char]; //次数加1} else {o[char] 1;…

c语言 文件游程统计,游程 码表 如何形成

游程 码表 如何形成求一个程序 将下表用huffman 树存储表示用传统的霍夫曼建立的树 好像不能形成此码表。我感觉应该有一个特等的算法。我也试了好几种方法&#xff0c;感觉都不行&#xff0c;希望大家给点建议。(码表 要利于编码和解码)(部分码表)白游程 码子 黑游程 码子(长…

用2468这四个数字c语言,C语言作业及参考答案.doc

C语言及实验作业参考做法分支程序设计上机作业&#xff1a;标题4.3三角形判断描述输入三条边的长&#xff0c;输出这三条边是否构成等边三角形、等腰三角形、直角三角形、普通三角形&#xff0c;还是不能构成三角形输入数据整数a,b,c的值输出数据等边三角形、等腰三角形、直角三…

C# WinForm开发系列 - GDI+【转】

http://blog.csdn.net/blue_sky6/article/details/53811435?locationNum6&fps1 C# WinForm开发系列 - GDI Posted on 2009-07-19 15:23 peterzb 阅读(48850) 评论(17) 编辑 收藏 UI&#xff08;User Interface&#xff09;编程在整个项目开发过程中是个颇为重要的环节&…

2.ORM思想

一、ORM思想介绍 orm是一种思想&#xff0c;是dao层代码的一种编写思想。其中&#xff1a;o代表Object&#xff0c;java对象&#xff1b;r代表Relation&#xff0c;关系型数据库&#xff1b;m代表Map&#xff0c;java对象和关系型数据库表的映射关系。该思想主张&#xff1a;1、…

android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程

易采站长站为您分析Android中颜色选择器和改变字体颜色的实例教程,其中改变字体颜色用到了ColorPicker颜色选择器,需要的朋友可以参考下1.构建一张七彩图:我们经常看到这种样子的颜色选择器吧..然后其实右边的亮度选择是:这样我们的代码就可以进行啦...// 创建七彩图片private …

3.hello hibernate

一、Hibernate的开发步骤 1、引入jar文件2、配置3、apihibernate的映射文件的配置是不容易的&#xff0c;是重点学习的地方。二、Hello Hibernate 1、数据库表准备 数据库名 &#xff1a;test表&#xff1a;DROP TABLE IF EXISTS users; CREATE TABLE users (id int(11) NOT N…

无法连接oralce问题(不断更新)

1、oracle自带的sqlplus能连接&#xff0c;但第三方工具如plsqldev不能连接 解决方法&#xff1a;1、确认listener.ora&#xff0c;tnsnames.ora配置文件中的host地址一致。且&#xff1a;listener.ora只能配置主机名。winr&#xff0c;cmd&#xff0c;hostname 获取主机名。2、…

新版vue-cli搭建多页面应用

2019独角兽企业重金招聘Python工程师标准>>> 折腾了好久&#xff0c;终于把坑踩完了&#xff0c;废话不多说&#xff0c;上教程~ github地址&#xff1a;https://github.com/guolihuaGitHub/vue-cli-multipage 另外推荐一下我另一篇博客&#xff0c;我觉得这篇好用&…

android开发方法数,Android减少App方法数

作为Android开发者我们都知道Android应用方法数65535这样一个限制&#xff0c;这是因为在Android系统中&#xff0c;方法的id使用short类型存储在Dex文件中&#xff0c;而short类型的取值范围是-32,768到32,767&#xff0c;因此导致Android应用方法数65535这样一个最大限制&…