`

js模式对话框控制

    博客分类:
  • ajax
阅读更多
Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如:
  showModalDialog() (IE 4+ 支持)
  showModelessDialog() (IE 5+ 支持)

window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框,由于是对话框,因此它并没有一般用window.open()打开的窗口的所有属性。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。
当我们用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时, 打开对话框的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。
使用方法如下:
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])
参数说明:
sURL
必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments
可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures
可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
  dialogHeight 对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。
  dialogWidth: 对话框宽度。
  dialogLeft: 距离桌面左的距离。
  dialogTop: 离桌面上的距离。
  center:     {yes | no | 1 | 0 }              :窗口是否居中,默认yes,但仍可以指定高度和宽度。
  help:        {yes | no | 1 | 0 }              :是否显示帮助按钮,默认yes。
  resizable:  {yes | no | 1 | 0 }IE5+]   :是否可被改变大小。默认no。
  status:      {yes | no | 1 | 0 } IE5+]    :是否显示状态栏。默认为yes[ Modeless]或no[Modal]。
         scroll:      { yes | no | 1 | 0 | on | off } :指明对话框是否显示滚动条。默认为yes。
  还有几个属性是用在HTA中的,在一般的网页中一般不使用。
         dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。
         edge:{ sunken | raised }                     :指明对话框的边框样式。默认为raised。
         unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。
传入参数:
要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:
test1.htm
====================
<script>
  var mxh1 = new Array("mxh","net_lover","孟子E章")
  var mxh2 = window.open("about:blank","window_mxh")
  // 向对话框传递数组
  window.showModalDialog("test2.htm",mxh1)
  // 向对话框传递window对象
  window.showModalDialog("test3.htm",mxh2)
</script>
test2.htm
====================
<script>
  var a = window.dialogArguments
  alert("您传递的参数为:" + a)
</script>
test3.htm
====================
<script>
  var a = window.dialogArguments
  alert("您传递的参数为window对象,名称:" + a.name)
</script>
可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:
test4.htm
===================
<script>
  var a = window.showModalDialog("test5.htm")
  for(i=0;i<a.length;i++) alert(a[i])
</script>
test5.htm
===================
<script>
function sendTo()
{
  var a=new Array("a","b")
  window.returnValue = a
  window.close()
}
</script>
<body>
<form>
  <input value="返回" type=button >
</form>
常见问题:
1,如何在模态对话框中进行提交而不新开窗口?
如果你 的 浏览器是IE5.5+,可以在对话框中使用带name属性的iframe,提交时可以制定target为该iframe的name。对于IE4+,你可以用高度为0的frame来作:例子,
test6.htm
===================
<script>
  window.showModalDialog("test7.htm")
</script>
test7.htm
===================
if(window.location.search) alert(window.location.search)
<frameset rows="0,*">
  <frame src="about:blank">
  <frame src="test8.htm">
</frameset>
test8.htm
===================
<form target="_self" method="get">
<input value="test">
<input type=submit>
</form>
<script>
if(window.location.search) alert(window.location.search)
</script>
2,可以通过http://servername/virtualdirname/test.htm?name=mxh方式直接向对话框传递参数吗?
答案是不能。但在frame里是可以的。



showModalDialog和showModelessDialog使用心得
一、showModalDialog和showModelessDialog有什么不同?
  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
  showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)
二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。
三、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:
<body (event.keyCode==116){reload.click()}">
<a href="filename.htm" style="display:none">reload...</a>
  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。
四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" >
  也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。
五、showModalDialog和showModelessDialog数据传递技巧。
  (作者语:本来想用一问一答形式来写的,但是我想不出这个怎么问,所以只好这样了。)
  这个东西比较麻烦,我改了好几次了不是没办法说明白(语文水平越来越差了),只好用个例子说明了。
  例子:
    现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name
      一般的传递方式:
        window.showModalDialog("filename.htm",var_name)
        //传递var_name变量
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments)//读取var_name变量
        window.dialogArguments="oyiboy"//设置var_name变量
    这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。
    
      以下是我建议使用的传递方式:
        window.showModalDialog("filename.htm",window)
        //不管要操作什么变量,只直传递主窗口的window对象
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments.var_name)//读取var_name变量
        window.dialogArguments.var_name="oyiboy"//设置var_name变量
        同时我也可以操作var_id变量
        alert(window.dialogArguments.var_id)//读取var_id变量
        window.dialogArguments.var_id="001"//设置var_id变量
        同样还可以对主窗口的任何对象进行操作,如form对象里的元素。
        window.dialogArguments.form1.index1.value="这是在设置index1元素的值"
六、多个showModelessDialog的相互操作。
  因为光说很费劲,我就偷点懒,直接用代码来说了,如果不明白的话那就直接来信(oyiboy#163.net(使用时请将#改成@))问我吧。
  以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。
  主文件的部份js代码。
  var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px") //打开控制窗口
  var s2=showModelessDialog('about:blank',window,"dialogTop:200px;dialogLeft:300px")  //打开被控制窗口
  控制.htm的部份代码。
  <script>
    //操作位置数据,因为窗口的位置数据是"xxxpx"方式的,所以需要这样的一个特殊操作函数。
function countNumber(A_strNumber,A_strWhatdo)
{
  A_strNumber=A_strNumber.replace('px','')
  A_strNumber-=0
  switch(A_strWhatdo)
  {
  case "-":A_strNumber-=10;break;
  case "+":A_strNumber+=10;break;
  }
  return A_strNumber + "px"
}
  </script>
  <input type="button" -')" value="上移">
  <input type="button" -')" value="左移">
  <input type="button" +')" value="右移">
  <input type="button" +')" value="下移">
  以上关键部份是:
    窗口命名方式:var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px")
    变量访问方式:window.dialogArguments.s2.dialogTop
  这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。
分享到:
评论

相关推荐

    react-st-modal:用于React JS的简单灵活的模式对话框组件

    产品特点简单易用的API 与移动设备兼容已实施的标准交互功能:警报,确认,提示异步/等待语法通过CSS变量自定义辅助功能和焦点控制动态调用模式对话框,不需要在代码中定义没有第三方图书馆演示和文档: ://nodlik....

    javascript的对话框详解与参数

    对话框可以分为模式对话框和无模式对话框两种,两者的区别在于对话框被关闭之前用户能否在同一应用程序的其他地方进行工作。 1. 模式对话框:模式对话框会始终保持焦点,除非关闭对话框,否则无法切换窗口。例如...

    javascript网页特效实例大全(13-19)

    15.1 弹出窗口/对话框控制 574 实例357 关闭弹出窗口时刷新父窗口 574 实例358 打开新窗口显示详细信息 575 实例359 弹出网页模式对话框 577 实例360 日期选择器 580 实例361 弹出提示对话框并重定向网页...

    用JQuery 实现的自定义对话框

    虽然在IE下可以通过模式窗体的方式创建更丰富的对话框功能,但毕竟只有IE得到支持。为了得到更丰富的自定义对话框功能,于是用JQuery编写了一个对话框插件;只需简单地引用相关JavaScript就能得到丰富的自定义对话框...

    JavaScript网页特效范例宝典源码

    实例011 弹出全屏显示的网页模式对话框 16 实例012 网页拾色器 18 实例013 日期选择器 21 1.3 窗口的动画效果 26 实例014 页面自动滚动 26 实例015 打开窗口特殊效果 27 实例016 动态显示窗口 29 实例017 慢慢放大的...

    ngModal:Angular.js的非常基本的模态对话框指令

    ngModal ngModal是非常简单的模式对话框指令。下载与Angular 1.2.x兼容。 您也可以使用安装该软件包。 bower install ngModal 或将其添加到您的bower.json文件中: dependencies: { "ngModal" : "~1.2.0"}基础知识要...

    jQuery特效之浮动div模式框

    它是专为小的对话框,提示和面板等需要使用模式窗口的场合打造的。专门用来处理隐藏的内容,并且不应用任何样式给目标元素。虽然LeanModal具有较多的优势,但在实际开发过程中往往不灵活,因而对原LeanModal插件进行...

    重点::glasses:最小的弹出窗口,模式窗口,叠加窗口,抽屉和对话框窗口插件

    焦点一个最小的弹出窗口,模式窗口,通知窗口,叠加窗口,抽屉和对话框窗口插件。查看以了解更多发展历程$ git clone git@github.com:Elkfox/Focus.git $ npm install 使用gulp编译焦点。 src文件位于src/focus.js并...

    jQuery Frontier Calendar 1.3.2

    google code上的一个开源项目源码、实例...当在一个日期单元格中有比较多的待办事项时,将出现一个更多的链接,点击这个链接会弹一个jQuery模式对话框来显示所有的事务。这个日历还支持通过CSS文件改变整个日历的背景。

    大名鼎鼎SWFUpload- Flash+JS 上传

     SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 [编辑本段]SWFUpload的主要特点  * 可以...

    程序天下:JavaScript实例自学手册

    1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 ...

    JavaScript王者归来part.1 总数2

     11.3.2.1 模拟对话框--创建一个窗口对话框及一个对话框阻塞进行的例子   11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip标准   11.3.3 状态栏   11.4 框架--上层的Window对象   11.4.1 ...

    JavaScript详解(第2版)

     第4章 对话框   4.1 与用户交互   4.1.1 alert&#40;&#41;方法   4.1.2 prompt()方法   4.1.3 confirm()方法   4.2 应知应会   练习   第5章 运算符   5.1 JavaScript运算符和表达式   ...

    javaScript实例自学手册486例,附带目录可方便搜索

    1.17 以频道模式打开页面.htm 1.18 自动识别网页类型.htm 1.19 在网页中动态添加Script脚本.htm 1.2 页面自动最大化.htm 1.20 用JavaScript随机修改页面的标题.htm 1.21 判断网页加载完毕.htm 1.22 嵌入网页...

    《程序天下:JavaScript实例自学手册》光盘源码

    1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 ...

    精通JS脚本之ExtJS框架.part1.rar

    15.5.2 IE下的优秀JavaScript调试工具Companion.JS 15.5.3 DebugBar和Companion.JS的基本操作 15.6 调试技巧 15.6.1 在Firebug中直接调试脚本 15.6.2 调试代码运行速度 15.6.3 查看对象属性 第16章 ExtJS案例...

    关于JSP和JavaScript的探析.pdf

    与此同时,主流技术研发企业和用户已经由C/S模式向B/S模式过渡,而B/S 运用的比较广的是JSP与JavaScript的结合运用。 一、什么是JSP和JavaScript? JSP的英文全称是Java Server Page,中文全称是Java服务器端...

    精通JS脚本之ExtJS框架.part2.rar

    15.5.2 IE下的优秀JavaScript调试工具Companion.JS 15.5.3 DebugBar和Companion.JS的基本操作 15.6 调试技巧 15.6.1 在Firebug中直接调试脚本 15.6.2 调试代码运行速度 15.6.3 查看对象属性 第16章 ExtJS案例...

    modcon:JavaScript 模块化框架和执行控制器

    修改器ModCon是一个 JavaScript 模块化框架和执行控制器。 它提供了一种编写作用域模块的简单方法,这些模块可以在文档就绪时触发,甚至在重要的 DOM 更改事件期间(例如在对话框或模式窗口中通过 AJAX 加载视图)...

Global site tag (gtag.js) - Google Analytics