jQuery UI Dialog是jQuery UI的弹出对话框组件,使用它可以创建各种美观的弹出对话框;它可以设置对话框的标题、内容,并且使对话框可以拖动、调整大小、及关闭;平常主要用来替代浏览嚣自带的alert、confirm、open等方法。

主要参数

jQuery UI Dialog常用的参数有:

  1. autoOpen:默认true,即dialog方法创建就显示对话框
  2. buttons:默认无,用于设置显示的按钮,可以是JSON和Array形式:
    1. {"确定":function(){},"取消":function(){}}
    2. [{text:"确定", click: function(){}},{text:"取消",click:function(){}}]
  3. modal:默认false,是否模态对话框,如果设置为true则会创建一个遮罩层把页面其他元素遮住
  4. title:标题
  5. draggable:是否可手动,默认true
  6. resizable:是否可调整大小,默认true
  7. width:宽度,默认300
  8. height:高度,默认"auto"

其他一些不太常用的参数:

  1. closeOnEscape:默认true,按esc键关闭对话框
  2. show:打开对话框的动画效果
  3. hide:关闭对话框的动画效果
  4. position:对话框显示的位置,默认"center",可以设置成字符串或数组:
    1. 'center', 'left', 'right', 'top', 'bottom'
    2. ['right','top'],通过上面的几个字符串组合(x,y)
    3. [350,100],绝对的数值(x,y)
  5. minWidth:默认150,最小宽度
  6. minHeight:默认150,最小高度

使用方法:

?
1
2
3
4
$( "..." ).dialog({
   title: "标题" ,
   //...更多参数
});

主要方法

jQuery UI Dialog提供了一些方法来控制对话框,仅列出常用的:

  1. open:打开对话框
  2. close:关闭对话框(通过close不会销毁,还能继续使用)
  3. destroy:销毁对话框
  4. option:设置参数,即前面列出的参数

使用的时候作为dialog方法的参数:

?
1
2
3
4
5
var dlg = $( "..." ).dialog({
   //...各种参数
});
dlg.dialog( "option" , { title: "标题" }); // 设置参数
dlg.dialog( "open" ); // 使用open方法打开对话框

主要事件

jQuery UI Dialog提供了一些事件,比如打开、关闭对话框的时候做一些额外的事情:

  1. open:打开时
  2. close:关闭时
  3. create:创建时
  4. resize:调整大小时
  5. drag:拖动时

使用方法同参数的使用方法,比如在打开时隐藏关闭按钮:

?
1
2
3
4
5
6
$( "..." ).dialog({
   //...各种参数
   open: function (event, ui) {
      $( ".ui-dialog-titlebar-close" , $( this ).parent()).hide();
   }
});

具体使用

以下封装了一些常用的提示信息,不再详细解释:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
jQuery.extend(jQuery, {
   // jQuery UI alert弹出提示
   jqalert: function (text, title, fn) {
     var html =
     '<div class="dialog" id="dialog-message">' +
     '  <p>' +
     '    <span class="ui-icon ui-icon-circle-check" style="float: left; margin: 0 7px 0 0;"></span>' + text +
     '  </p>' +
     '</div>' ;
     return $(html).dialog({
       //autoOpen: false,
       resizable: false ,
       modal: true ,
       show: {
         effect: 'fade' ,
         duration: 300
       },
       title: title || "提示信息" ,
       buttons: {
         "确定" : function () {
           var dlg = $( this ).dialog( "close" );
           fn && fn.call(dlg);
         }
       }     
     });
   },
   // jQuery UI alert弹出提示,一定间隔之后自动关闭
   jqtimeralert: function (text, title, fn, timerMax) {
     var dd = $(
     '<div class="dialog" id="dialog-message">' +
     '  <p>' +
     '    <span class="ui-icon ui-icon-circle-check" style="float: left; margin: 0 7px 0 0;"></span>' + text +
     '  </p>' +
     '</div>' );
     dd[0].timerMax = timerMax || 3;
     return dd.dialog({
       //autoOpen: false,
       resizable: false ,
       modal: true ,
       show: {
         effect: 'fade' ,
         duration: 300
       },
       open: function (e, ui) {
         var me = this ,
           dlg = $( this ),
           btn = dlg.parent().find( ".ui-button-text" ).text( "确定(" + me.timerMax + ")" );
         --me.timerMax;
         me.timer = window.setInterval( function () {
           btn.text( "确定(" + me.timerMax + ")" );
           if (me.timerMax-- <= 0) {
             dlg.dialog( "close" );
             fn && fn.call(dlg);
             window.clearInterval(me.timer); // 时间到了清除计时器
           }
         }, 1000);
       },
       title: title || "提示信息" ,
       buttons: {
         "确定" : function () {
           var dlg = $( this ).dialog( "close" );
           fn && fn.call(dlg);
           window.clearInterval( this .timer); // 清除计时器
         }
       },
       close: function () {
         window.clearInterval( this .timer); // 清除计时器
       }
     });
   },
   // jQuery UI confirm弹出确认提示
   jqconfirm: function (text, title, fn1, fn2) {
     var html =
     '<div class="dialog" id="dialog-confirm">' +
     '  <p>' +
     '    <span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"></span>' + text +
     '  </p>' +
     '</div>' ;
     return $(html).dialog({
       //autoOpen: false,
       resizable: false ,
       modal: true ,
       show: {
         effect: 'fade' ,
         duration: 300
       },
       title: title || "提示信息" ,
       buttons: {
         "确定" : function () {
           var dlg = $( this ).dialog( "close" );
           fn1 && fn1.call(dlg, true );
         },
         "取消" : function () {
           var dlg = $( this ).dialog( "close" );
           fn2 && fn2(dlg, false );
         }
       }
     });
   },
   // jQuery UI 弹出iframe窗口
   jqopen: function (url, options) {
     var html =
     '<div class="dialog" id="dialog-window" title="提示信息">' +
     ' <iframe src="' + url + '" frameBorder="0" style="border: 0; " scrolling="auto" width="100%" height="100%"></iframe>' +
     '</div>' ;
     return $(html).dialog($.extend({
       modal: true ,
       closeOnEscape: false ,
       draggable: false ,
       resizable: false ,
       close: function (event, ui) {
         $( this ).dialog( "destroy" ); // 关闭时销毁
       }
     }, options));
   },
   // jQuery UI confirm提示
   confirm: function (evt, text, title) {
     evt = $.event.fix(evt);
     var me = evt.target;
     if (me.confirmResult) {
       me.confirmResult = false ;
       return true ;
     }
     jQuery.jqconfirm(text, title, function (e) {
       me.confirmResult = true ;
       if (e) {
         if (me.href && $.trim(me.href).indexOf( "javascript:" ) == 0) {
           $.globalEval(me.href);
           me.confirmResult = false ;
           return ;
         }
         var t = me.type && me.type.toLowerCase();
         if (t && me.name && (t == "image" || t == "submit" || t == "button" )) {
           __doPostBack(me.name, "" );
           me.confirmResult = false ;
           return ;
         }
         if (me.click) me.click(evt);
       }
       return false ;
     });
     return false ;
   }
});

以上代码还存在一个问题,就是每次弹出框关闭之后都没有销毁。

解决办法有(具体不演示):

  1. 在close事件里面destroy
  2. 把alert/confirm提供里的dialog实例设置成静态的
  3. 在外部调用使用单个dialog实例

演示程序

html代码如下:

    <div><input type="button" id="button1" value="普通提示" /><input type="button" id="button2" value="自动关闭提示" /><input type="button" id="button3" value="确认提示" /><input type="button" id="button4" value="确认提示2" /><input type="button" id="button5" value="打开窗口" /></div>

相应js代码如下:

    $(function() {$("#button1").click(function() {$.jqalert("这是普通提示!");});$("#button2").click(function() {$.jqtimeralert("这是自动关闭的提示!", "自动关闭提示",function() {$.jqalert("时间到");});});$("#button3").click(function() {$.jqconfirm("确定要这么做吗?", "确认提示", function() {$.jqalert("点了确定");},function() {$.jqalert("点了取消");});});$("#button4").click(function(e) {if ($.confirm(e, "确定要这么做吗?"))$.jqalert("点了确定");});$("#button5").click(function(e) {$.jqopen("http://lwme.cnblogs.com/", { title: "我的博客", width: 700, height: 500 });});});

对于服务器端控件使用confirm,可能需要如下方法:

  $("#button4").click(function(e) {if (!$.confirm(e, "确定要这么做吗?")) {e.stopPropagation();return false;}});

额外再提一下,jQuery UI使用的字体都是以em为单位,可能会导致平常使用时dialog变得比较大,可以额外设置以下样式:

    body { font-size: 12px; } // 默认字体大小/*jQuery UI fakes*/.ui-widget { font-size: 1em; }.ui-dialog .ui-dialog-buttonpane { padding-top: .1em; padding-bottom: .1em; }

这样子,dialog的大小看起来就比较正常了。

在Telerik RadControls for asp.net ajax中使用

主要是针对telerik RadButton控件,定义如下两个函数:

  // 用于RadButton的confirm确认回调,即触发按钮点击function radcallback(s) {return Function.createDelegate(s, function(argument) {if (argument) {this.click();}});}// 用于为RadButton添加confirm提示function radconfirm2(textOrFn, title, callback) {return function(s, e) {$.jqconfirm(textOrFn, title, callback || radcallback(s));//radconfirm(textOrFn, callback, 280, 50, null, title);e.set_cancel(true);};}

然后可以这样使用:

<telerik:RadButton ... OnClientClicking="radconfirm2('确定要这么做吗?')" />

jQuery UI Dialog相关推荐

  1. 解决Select2控件不能在jQuery UI Dialog中不能搜索的bug

    本文使用博客园Markdown编辑器进行编辑 1.问题呈现 项目中使用了jQuery UI的Dialog控件,一般用来处理需要提示用户输入或操作的简单页面.逻辑是修改一个广告的图片和标题. 效果截图如 ...

  2. jQuery UI dialog实现dialog弹框显示

    实现弹框,比较精美的jQuery.ui.*:来实现,弹框显示: jsp页面代码[jqueryuidialog.jsp]: <%@ page language="java" i ...

  3. jQuery UI dialog插件出错信息:$(this).dialog is not a function

    使用jQuery UI 1.7.2 dialog插件,遇到这样的错误: [img]http://dl.iteye.com/upload/attachment/308166/97c428e4-2ce2- ...

  4. Jquery UI dialog弹出层插件

    必须先下载Jquery UI插件 然后再把下载的文档复制到项目中,可以复制你需要的单个插件 --------------------------------------具体代码如下---------- ...

  5. Jquery UI dialog 详解

    还是先看例子吧.另外如果要拖动.改变dialog的大小的话要加上ui.draggble.js和ui.resizable.js <!DOCTYPE html> <html> &l ...

  6. Jquery UI dialog 详解 (中文)

    1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("open&q ...

  7. JQUERY插件学习之jQuery UI

    jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互 ...

  8. JQuery UI库 - Dialog

    在网站中我们经常会做一些好看的Popup Dialog,我们前面曾经讲过用JQuery的Importo插件 来做自定义的AlertBox. 其实,我们可以利用JQuery官方提供的UI库来做. 而且, ...

  9. jQuery UI全教程之一(dialog的使用教程)

    jQuery UI目前的版本已经更新到了1.8.7.个人感觉和easyui相比起来,jQuery UI在界面的美观程度和可定制型更强一些.所以再次将一些jQuery UI组件的用法说明一下,方便日后查 ...

最新文章

  1. Controller 是单例还是多例?怎么保证并发的安全
  2. 函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事
  3. Linux 查看端口占用情况 并 结束进程
  4. Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)【Dalston版】
  5. MessageDigest简介
  6. colab显示没有gpu的解决方法
  7. 产品开发项目中文档的重要性
  8. TKDragView_TKCalendarView:页面curl的动画日历
  9. python自动视频摘要_专栏丨深度学习之视频摘要简述
  10. POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL
  11. MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析
  12. 有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)
  13. 我的团长我的团第九集
  14. Android蓝牙4.0单车锁应用实例开发
  15. MyBioSource丨人Hif1αelisa试剂盒解决方案
  16. 微信小程序 报错errcode: 40029, errmsg: “invalid code
  17. 上传file时accept限制文件类型pdf、doc、docx、 jpg、 png、xls 、xlsx等格式
  18. win10关闭快速启动_注意:win10系统快速启动功能虽然好用,但也会带来一些麻烦...
  19. 不理解栈和队列?知道子弹上膛和火车穿隧道就好
  20. 睢宁县计算机学校,睢宁管理好的计算机专业报考条件_汽车装修专业

热门文章

  1. 以华为公司为例的我国业务流程管理实践研究
  2. “瓮中捉鳖”——涨停板一般出现在什么时候?
  3. HTML在线颜色选择器源码
  4. 写给女儿高中编程课老师的一封信
  5. 基于关联规则(Apriori)+协同过滤(collaborative filtering)实现电影推荐系统
  6. 开机自动随机改计算机名,【优化电脑·禁止随机启动项·加速开机】
  7. WordPress快速增加百度收录的方法
  8. 安装net_speeder
  9. 基于libyuv库的NV12格式图片的缩放
  10. 名帖168 李邕 行书《出师表》