LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
版主

JavaScrip高级应用:操作模态与非模态对话框

tercel
2010年8月13日 9:27 本文热度 4385
我们知道,对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。本文介绍如何使用javascript语言来创建这两种类型的对话框、控制其大小和位置、改变其外观以及在对话框间的数据传递。 本文的所有例程中,从层次上涉及到2个html页面。我们把第一个页面叫做caller页面,第二个页面叫做callee页面。也就是说,在caller页面执行代码创建生成callee页面。 [b]一、创建模态和非模态对话框[/b] 首先,我们举个例子来快速了解一下什么是模态与非模态。在caller.htm中,我们输入以下代码:

在浏览器中打开caller.htm,点击“创建模态对话框”按钮,将会出现一个对话框窗口,其中的内容是callee.htm。你会看到,除了关闭这个新窗口,无论怎样我们也不能将其他的窗口设置为“当前活动”窗口,这个一直是活动状态的窗口类型就是模态类型。关闭这个模态对话框,回到caller.htm页面,点击“创建非模态对话框”,出现一个包含callee.htm页面的对话框窗口。这回有所不同,鼠标可以转移到其他地方使另外的窗口成为“当前活动”状态,这就是非模态的概念。 接下来,我们看看创建模态对话框与非模态对话框的相关语法: 创建模态对话框: vreturnvalue = window.showmodaldialog(surl [, vfreeargument] [, sornaments]); 创建非模态对话框: vreturnvalue = window.showmodelessdialog(surl [, vfreeargument] [, sornaments]); 从上面的语法我们得知:除了名字有所区别外,参数种类与含义都相同。以下是各参数的含义: · vreturnvalue:对于showmodaldialog(),它表示被打开的对话框窗口设置的returnvalue属性值。对于showmodelessdialog(),它表示新窗口对象。 · vfreeargument:这个参数可用于传递某种类型的数据到打开的对话框,数据可以是一个数值、字符串、数组或者一个对象类型。在新窗口中引用这个数值时,可通过新创建window对象的dialogarguments 属性。 · sornaments:用这个参数指定新窗口的外观。可选择的窗口属性有很多种,当有多种控制需求时,将相关内容用一个字符串连接起来,其间用分号隔开。以下是可选择的属性种类: o dialogheight: sheight o dialogleft: sxpos o dialogtop: sypos o dialogwidth: swidth o center: ( yes | no | 1 | 0 | on | off ) o dialoghide: ( yes | no | 1 | 0 | on | off ) o edge: ( sunken | raised ) o help: ( yes | no | 1 | 0 | on | off ) o resizable: ( yes | no | 1 | 0 | on | off ) o scroll: ( yes | no | 1 | 0 | on | off ) o status: ( yes | no | 1 | 0 | on | off ) 除了以上属性外,我们还可以加入更加丰富的css控制。 以下我们来详细解释如何应用这些属性。 [b]二、控制对话框大小和位置[/b] 控制对话框的大小和位置涉及到5个方面:高度(dialogheight)、宽度(dialogwidth)、相对于桌面左上角的x坐标(dialogleft)、y坐标(dialogtop)以及是否让对话框窗口居中(center)。由于不同版本的internet explorer浏览器处理的默认度量单位并非一致,所以我们在指定高度、宽度等大小时,最好是同时设置好单位。单位种类包括很多,比如cm、mm、in、pt、pc、px。请注意:最小的高度值是100px。 下面的代码将打开一个高200px、宽800px的对话框: window.showmodaldialog('callee.htm','','dialogheight:200px;dialogwidth:800px'); 我们注意到,打开的新窗口会在桌面中处于居中的位置,这也正是居中属性(center)的默认值。居中属性(center)的可取值包括yes、no、1、0、on和off,含义一目了然。执行以下代码,看看关闭居中属性后新窗口的位置: window.showmodaldialog('callee.htm','','dialogheight:200px;dialogwidth:800px;center:no'); 我们看到,新窗口紧挨者桌面的左上角打开。当然,我们可以使用dialogleft和dialogtop 属性来精确定义新窗口的打开位置。下面的代码将在相对于桌面左上角的x位置300px和y位置500px处打开新窗口: window.showmodaldialog('callee.htm','','dialogheight:200px;dialogwidth:800px;dialogleft:300;[br]dialogtop:500') 注意,即使指定了居中属性,但如果同时设置了dialogleft和dialogtop属性值,那么窗口位置将遵从后者。试一试执行下面的代码: window.showmodaldialog('callee.htm','','dialogheight:200px;dialogwidth:800px;dialogleft:300;[br]dialogtop:500;center:yes') [b]三、改变对话框外观[/b] 对话框的外观控制包括从窗口边缘风格(edge)、是否存在滚动条(scroll)、是否包含上下文关联提示图标(help)、是否显示状态栏(status)以及是否可以改变窗口大小(resizable)等方面。默认情况下,新打开的窗口是大小不可改变的、边缘风格为凸起、在新窗口右上角显示一个上下文关联提示图标、存在滚动条,比如: edge的可取值为sunken(凹陷)和raised(凸起),status、help、resizeable和scroll的可取值都是yes、no、1、0、on和off,其含义一目了然。 下面的代码将去除上下文关联提示图标、不显示状态栏、窗口边缘风格为凹陷: showmodelessdialog("callee.htm","","status:0;help:0;edge:sunken"); [p]执行后,图示如下:[/p] [p] [/p] [b]四、从caller页面传递数据到callee页面[/b] 上面我们介绍了创建模态和非模态窗口的语法以及如何控制新窗口的大小、位置和外观,接下来我们研究一下实际应用中更实用的功能:如何从caller页面传递数据到callee页面。 从caller页面传递给callee页面的数据分为3类:传递值、传递数组引用以及传递对象,它们都是通过showmodaldialog()和showmodelessdialog()的第2个参数实现的。 [b](一)传递值类型数据[/b] 在caller.htm页面中输入以下代码:

在callee.htm页面中输入以下代码: 在浏览器中打开caller.htm,点击任意一个按钮,我们将首先看到如下的提示信息框: 然后才出现新窗口。这种情况下,callee.htm页面中的window对象的属性dialogarguments将对应于caller.htm页面中的"打开了一个新模态窗口"或者"打开了一个新非模态窗口"。如果直接打开callee.htm,将会出现错误提示。 [b](二)传递数组引用类型数据[/b] 第一种值类型数据的传递中,在callee.htm页面中只能读取caller.htm页面的传递数据。当需要对caller.htm页面的传递内容进行修改时,就需使用到数组引用类型的传递方式。 首先,在caller.htm页面中输入以下代码:

然后在callee.htm页面中输入以下代码: 最后,在浏览器中打开caller.htm,点击任意一个按钮,我们将首先看到如下的对话框: 接着关闭这个对话框以及新打开的窗口,再次点击一个按钮,又出现一个对话框: 从运行结果我们看到,在caller.htm页面中通过对数组a的地址引用,就可以实现在callee.htm中修改数组a的内容。 注意在callee.htm中要首先建立对传递数据的附值:a = dialogarguments。 [b](三)传递对象类型数据[/b] 在caller.htm和callee.htm中传递数据的最有效方式是通过对象方式进行,这不仅能实现从caller.htm到callee.htm的传递,还能从callee.htm传递到caller.htm。而且,我们还可以在caller.htm中定义对象的方法,再在callee.htm中使用它们。实际上,我们可以将caller.htm的window对象传递给callee.htm,这样就可以在callee.htm中访问caller.htm的变量及函数。 来看看一个实际的例子。在caller.htm中输入以下代码: 传递对象数据

输入你最喜欢的颜色: yellow

在callee.htm中输入以下代码: callee.html [p][/p] [p] [/p] 输入你最喜欢的颜色:

在浏览器中打开caller.htm,点击“显示非模态对话框”按钮,出现新对话框: 在对话框中输入其他颜色名称,点击“apply”按钮后,执行callee.htm中的getinfoandupdate函数: function getinfoandupdate() { var callerwindowobj = dialogarguments; callerwindowobj.scolor = oentercolor.value; callerwindowobj.update(); } 因为在caller.htm中传递给callee.htm的是对象类型数据window,所以经过第一条语句的附值,callerwindowobj就指向了caller.htm页面,然后就可以在callee.htm中按照callerwindowobj.xxx的形式引用caller.htm中的变量及函数:callerwindowobj.scolor = oentercolor.value负责将callee.htm中输入的颜色名称传递给caller.htm中的变量scolor,然后再执行caller.htm中的 update()函数更新显示信息。 可以看到,通过对象方式传递数据,功能很丰富强大,而且使用起来也不复杂。 [b]六、结 语[/b] 以上对使用javascript语言操作模态和非模态对话框进行了详细介绍,相信你又掌握了在html页面中创建窗口的一个新技术。在实际应用中,模态对话框的功能比较实用,可用于必须让访问者阅读相关内容的情况下。另外,利用对象方式在窗口间传递数据,功能非常强大但使用却不复杂,是非常值得一用的技术。

该文章在 2010/8/13 9:27:24 编辑过

全部评论1

tercel
2010年8月13日 9:28
[p]parentpage.aspx:主页面[/p] [p]dialogpage.aspx:模态窗口,在部分要添加[/p] [p] [/p] [p]一、模态窗口打开[br]parentpage.aspx:[br]window.showmodaldialog("dialogpage.aspx",window,"dialogheight: 200px; dialogwidth: 150px; dialogtop: 458px; [/p] [p]dialogleft: 166px; edge: raised; center: yes; help: yes; resizable: yes; status: yes;");[/p] [p] [/p] [p]二、模态窗口关闭[br]dialogpage.aspx:[br]window.close();[/p] [p] [/p] [p]三、模态窗口传递参数[br]parentpage.aspx:[br]window.showmodaldialog("dialogpage.aspx?para1=para1&psara2=para2");[/p] [p]dialogpage.aspx:[br]string str1=request.querystring["para1"].tostring();[br]string str2=request.querystring["para2"].tostring();[/p] [p] [/p] [p]四、模态窗口获取返回值[br]parentpage.aspx:[br]var str=window.showmodaldialog("dialogpage.aspx");[br]str[0]、str[1]、str[2][/p] [p]dialogpage.aspx:[br]arrcheck[0]=value1;[br]arrcheck[1]=value2;[br]arrcheck[2]=value3;[br]window.returnvalue = arrcheck;[/p] [p] [/p] [p]五、模态窗口缓存问题(只有第一次打开模态窗口才执行page_load事件)[/p] [p]parentpage.aspx:[br]window.showmodaldialog("dialogpage.aspx?__rand="+math.random());[/p] [p]其中__rand为自定义参数。[/p] [p]网上还有其他几种解决方案(都是清空缓存的,没有尝试过)![/p] [p] [/p] [p] [/p] [p]-------------------------------------------------------------------------------------[br]msdn关于摸态窗口的基本介绍:[br]showmodaldialog() (ie 4+ 支持)[br]showmodelessdialog() (ie 5+ 支持)[br]showmodaldialog()方法用来创建一个显示html内容的模态对话框。[br]showmodelessdialog()方法用来创建一个显示html内容的非模态对话框。[br][br]使用方法:[br]vreturnvalue = showmodaldialog(surl [, varguments] [,sfeatures])[br]vreturnvalue = showmodelessdialog(surl [, varguments] [,sfeatures])[br][br]参数说明:[br]surl--[br]必选参数,类型:字符串。用来指定对话框要显示的文档的url。[br]varguments--[br]可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过dialogarguments来取得传递进来的参数。[br]sfeatures--[br]可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。[br]1.dialogheight :对话框高度,不小于100px,ie4中dialogheight 和 dialogwidth 默认的单位是em,而ie5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。[br]2.dialogwidth: 对话框宽度。[br]3.dialogleft: 离屏幕左的距离。[br]4.dialogtop: 离屏幕上的距离。[br]5.center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。[br]6.help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。[br]7.resizable: {yes | no | 1 | 0 } [ie5+]:是否可被改变大小。默认no。[br]8.status: {yes | no | 1 | 0 } [ie5+]:是否显示状态栏。默认为yes[ modeless]或no[modal]。[br]9.scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。[br]下面几个属性是用在hta中的,在一般的网页中一般不使用。[br]10.dialoghide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。[br]11.edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。[br]12.unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。[/p]

该评论在 2010/8/13 9:28:04 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved