showModalDialog()、showModelessDialog()方法使用详解

一、showModalDialog和showModelessDialog有什么不同?
  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
  showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)

二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。

三、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:

<body οnkeydοwn="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" οnclick="window.close()">
  也要配合<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" οnclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'-')" value="上移">
  <input type="button" οnclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'-')" value="左移">
  <input type="button" οnclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'+')" value="右移">
  <input type="button" οnclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'+')" value="下移">

  以上关键部份是:
    窗口命名方式:var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px")
    变量访问方式:window.dialogArguments.s2.dialogTop

  这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。

 

showModalDialog()、showModelessDialog()方法使用详解
作者:佚名 文章来源:互联网 点击数:334 更新时间:2005-4-1
 
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 
 
 
 
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 οnclick="sendTo()">
</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 name=txt 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里是可以的。

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

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

相关文章

.NET 项目中的单元测试

.NET 项目中的单元测试Intro“不会写单元测试的程序员不是合格的程序员&#xff0c;不写单元测试的程序员不是优秀的工程师。”—— 一只想要成为一个优秀程序员的渣逼程序猿。那么问题来了&#xff0c;什么是单元测试&#xff0c;如何做单元测试。单元测试单元测试的定义按照维…

职称计算机还用考试,职称计算机考试注意事项

职称计算机考试注意事项一、注意事项首先&#xff0c;由于考试是模块化设计&#xff0c;所以在报考时要选择自己熟悉的科目。切忌好高骛远&#xff0c;选择那些自己日常使用机会不多、并无把握的科目。许多人在考试时选择了自己工作中最常用的Windows XP、Word 2003、PowerPoin…

休假2周

又一次辞职了 :(这次的原因是觉得之前的公司无论在数据量还是流量及其它方面都过于小了&#xff0c;而且所谓的‘股份’也是一种看不见的东西&#xff0c;公司也没有上市&#xff0c;分红也是老板说了算&#xff0c;我也决定不了什么&#xff1b;其他的原因就是在一些人际、行政…

python安装地是什么_如何安装python

展开全部 Python是跨平台的&#xff0c;可以运行在2113Windows、Mac和各种Linux/Unix系统上5261。在Windows上写Python程序&#xff0c;放到Linux上也是能够4102运行的。 要开始学习1653Python编程&#xff0c;首先就得把Python安装到电脑里。安装后&#xff0c;会得到Python解…

ABP vNext 实现租户Id自动赋值插入

背景在使用ABP vNext过程中&#xff0c;因为我们的用户体系庞大&#xff0c;所以一直与其他业务同时开发&#xff0c;在开发其他业务模块时&#xff0c;我们一直存在着误区&#xff1a;认为ABP vNext 自动处理了数据新增时的租户Id&#xff08;TenantId&#xff09;的自动赋值插…

solaris 命令

一.chmod 命令 chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法&#xff1b;另一种是包含数字的数字设定法。 1. 文字设定法 命令中各选项的含义为&#xff1a; 在一个命令行中可给出多…

计算机组成与结构PLA,计算机组成与结构.doc

《》教学大纲安徽大学 计算机 学院二OO六年 4 月《计算机组成与结构》是计算机科学与技术、软件工程专业的一门主干课程&#xff0c;本课程以冯&#xff0e;诺依曼计算机模型作为教学起点&#xff0c;介绍计算机的组织结构和工作原理&#xff0c;剖析计算机的运算器、存储器、控…

深入研究.NET 5的开放式遥测

OpenTelemetry 介绍OpenTelemetry是一种开放的源代码规范&#xff0c;工具和SDK&#xff0c;用于检测&#xff0c;生成&#xff0c;收集和导出遥测数据&#xff08;指标&#xff0c;日志和跟踪&#xff09;,开放遥测技术得到了Cloud Native Computing Foundation&#xff08;CN…

python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...

优化这种方法的方法不是找出更快的方式来生成排列&#xff0c;而是生成尽可能少的排列。 首先&#xff0c;如果您只想要按排序顺序的组合&#xff0c;您将如何做到这一点&#xff1f; 您不需要生成0到100的所有可能组合&#xff0c;然后对其进行过滤。第一个数字a可以是0到100之…

登陆xp系统,无法显示桌面

症状登录到 Windows xp 后&#xff0c;可能会看到空白桌面或看不到桌面。出现这种情况时&#xff0c;可以按下 CtrlAltDelete 键启动任务管理器&#xff0c;但正在运行的任务或进程列表中却没有列出 Explorer.exe。启动 Explorer.exe 的新实例也无法解决问题。 原因…

孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项

怀孕期间孕妇使用电脑有电磁辐射吗&#xff1f;孕妇当然可以使用电脑&#xff0c;经科学研究发现在电脑前工作对孕妇不会产生什么影响&#xff01;孕妇既然是特别保护对象&#xff0c;那么怀孕妈妈在使用电脑时也会有一些注意事项。第一宝宝小编为准妈妈搜集了十二条注意事项。…

python类和函数_构建程序. Python中的类和函数

如果希望mainfunc的所有实例都使用相同的KeySeq对象,则可以使用默认参数值技巧&#xff1a; def mainfunc(ksKeySeq()): key ks.next() 只要您实际上没有传递ks值,对mainfunc的所有调用都将使用在定义函数时创建的KeySeq实例. 如果您不知道,这就是为什么&#xff1a;函数是一个…

CCDP-思科认证网络设计高级工程师

CCDP是Cisco售前设计支持工程师的最高级认证。获得CCDP认证证书应能够运用应具有的网络知识、对设备安装、配置和操作技巧对复杂的LAN、WAN和交换式局域网进行设计。 CCDP认证必备条件必须先获取CCNA和CCDA证书CCDP考试642-801 BSCI 642-811 BCMSN 642-871 ARCH CCDP 重新认证C…

.NET5实战千万并发,性能碾压各版本,云原生时代,.NET5为王!

在移动互联网时代掉队的.NET&#xff0c;当下正凭借着.NET5的开源跨平台以及容器友好&#xff0c;在云原生时代正在重铸辉煌。而作为.NET开发者&#xff0c;新年跳槽季的高并发问题会更多了&#xff0c;因为高并发能牵扯出太多问题&#xff0c;接口响应超时、CPU负载升高、GC频…

html点击按钮计算两个输入框的和_小程序计算报价功能介绍

一、使用场景用户可在管理后台设置计算值和运算公式&#xff0c;访客输入对应计算值&#xff0c;即可实现自动计算出结果&#xff0c;并提供相关的咨询入口&#xff0c;适用于装修、建材、房贷、车险等行业的报价行为。二、功能版本限制小程序至尊版可开启和使用计算报价功能。…

中南民族大学计算机图像处理实验报告,中南民族大学数字图像处理程序及图像...

数字图像处理实验课 matlab实验程序 以及图像结果 附带有命名图仅供参考 定有错误 木有绝对正确实验11—1close all;clear;fzeros(40,40);%f(10:30,10:30)1;subplot(1,3,1);%imshow(f);%Ffft2(f)subplot(1,3,2);%imshow(F);%Dlog(1abs(F));%subplot(1,3,3);imshow(D);1——2clc…

用python画树_Python+Turtle动态绘制一棵树实例分享

本文实例主要是对turtle的使用&#xff0c;实现Pythonturtle动态绘制一棵树的实例&#xff0c;具体代码&#xff1a; # drawtree.py from turtle import Turtle, mainloop def tree(plist, l, a, f): """ plist is list of pens l is length of branch a is hal…

[ASP.NET2.0] asp.net在ie7中使用FileUpload上传前预览图片 [ZT]

asp.net在ie7中使用FileUpload上传前预览图片 因为安全性问题&#xff0c;IE7禁用了image控件引用本地图片&#xff0c;为了这个问题郁闷了好几天&#xff0c;终于找到了解决方案&#xff0c;好东西要与大家分享&#xff0c;代码如下&#xff1a;此段代码放于<head> ....…

如何在 ASP.Net Core 使用 内存缓存

ASP.NET Core 是一个轻量级&#xff0c;模块化的框架&#xff0c;常用来在 Windows&#xff0c;Linux 和 MacOS 上构建高性能&#xff0c;现代化的web框架&#xff0c;不像过去的 Asp.NET&#xff0c;在 ASP.NET Core 中并没有内置 Cache 对象&#xff0c;不过你可以通过 nuget…

360浏览器5兼容模式吗_个独模式真能将企业总体税负降低至5%吗,为何大家都热衷核定征收...

个独模式真的能将企业总体税负降低至5%吗&#xff0c;为何大家都热衷选择申请核定征收企业性质不同&#xff0c;结构不同&#xff0c;体量不同&#xff0c;业务模式不同&#xff0c;自然纳税方式和税负也有差别。不同的纳税对象应该采取不同的节税方式&#xff0c;用合理合法的…