第7章 Window及相关顶级对象
- 格式:pdf
- 大小:1.34 MB
- 文档页数:57
findwindow 置顶函数用法-回复标题:破解Windows程序的“置顶”功能——深入探究findwindow置顶函数用法引言:在Windows操作系统中,置顶(topmost)是一个重要的功能,通常被用于将某个窗口置于其他所有窗口的前面,以保持其始终可见。
而findwindow置顶函数则是一种破解置顶功能的方法。
本文将一步一步地探究findwindow置顶函数的用法,帮助读者了解如何实现置顶效果以及相关的安全问题。
第一部分:了解findwindow置顶函数的基础知识1.1 理解findwindow函数findwindow函数是Windows API提供的一种用于搜索窗口的函数,可以通过窗口的类名或标题来查找窗口句柄(handle)。
一旦找到相应的窗口句柄,就可以对窗口进行各种操作,包括将其置顶。
(此处可适当展开关于findwindow函数更多的介绍,如参数的说明等)1.2 了解置顶功能的原理在Windows操作系统中,窗口分为普通窗口和置顶窗口两种类型。
普通窗口是默认的类型,它们根据层次结构来进行显示。
相比之下,置顶窗口则以特殊的方式进行处理,使其始终显示在其他窗口的前面。
为了实现置顶效果,可以通过修改窗口的窗口风格(window style)来将其置顶。
窗口风格是窗口的一些属性,可以通过窗口句柄进行设置或修改。
第二部分:实现findwindow置顶函数的步骤2.1 获取目标窗口句柄首先,需要通过findwindow函数来获取目标窗口的句柄。
句柄是一个唯一标识窗口的值,可以用于后续的操作。
2.2 修改窗口风格通过修改目标窗口的窗口风格,可以将其置顶。
具体来说,可以使用SetWindowLong(窗口句柄, GWL_STYLE, 新窗口风格)函数来实现。
其中,GWL_STYLE表示需要修改的窗口风格,新窗口风格是一个由特定标志位组成的数值。
2.3 设置置顶属性将目标窗口的置顶属性设置为真,即WS_EX_TOPMOST。
Web前端开发基础之JavaScript程序设计知到章节测试答案智慧树2023年最新浙江工业职业技术学院第一章测试1.下面不属于<script>标签属性的是()。
参考答案:href2.下列选项中,可以接收用户输入的信息的是()。
参考答案:prompt()3.下面关于JavaScript的概述不正确的是()。
参考答案:依赖于操作系统4.下列选项中,可以实现警告框的是()。
参考答案:alert()5.下面()标签可在页面中直接嵌入JavaScript。
参考答案:<script>6.下面关于字符串的描述错误的是()。
参考答案:单引号中使用单引号不需要转义7.下列选项中与++(后置)具有相同优先级的是运算符是()。
参考答案:--(后置)8.表达式Math.PI.toFixed(2)的运行结果为()。
参考答案:3.149.函数Object.prototype.toString.call('undefined')的返回值是()。
参考答案:"[object String]"10.下列选项中,不属于赋值运算符的是()。
参考答案:==11.下列选项中,在操作9和15时,结果为负数的是()。
参考答案:“~”12.下面关于逻辑运算符的说法错误的是()。
参考答案:逻辑运算的返回值是布尔型13.下列语句中可以重复执行一段代码的是()。
参考答案:while14.下面关于运算符的说法错误的是()。
参考答案:表达式中赋值运算符总是最后执行的15.以下选项中不属于选择结构语句的是()。
参考答案:while语句16.以下选项中不属于基本数据类型的是()。
参考答案:Object17.以下选项中可以保留2位小数的是()。
参考答案:toFixed()18.下面关于变量的说法错误的是()。
参考答案:保留字能够作为变量名称使用19.下面关于for语句描述错误的是()。
参考答案:for循环语句小括号内的分号分割符可以省略20.下列选项中可以将null转换成字符型的是()。
《Javscript实⽤教程》⽬录图书购买地址:京东:当当:天猫:注:本书提供课件,可向出版社索取。
⽬录Javascript实⽤教程 (1)⽬录 (2)第 1 部分 (12)◄ Javascript基础►. 12第 1 章 (13)◄ JavaScript 语法基础►. 131.1 基本概念和开发⼯具 (13)1.1.1 编程语⾔ (13)1.1.2 计算机语⾔ (13)1.1.3 编程语⾔ (13)1.1.4 翻译器 (14)1.1.5 编程语⾔和标记语⾔区别 (14)1.1.6 计算机基础 (14)1.1.7 浏览器 (16)1.1.8 ⽹页、⽹站和应⽤程序 (16)1.1.9 开发⼯具 (16)1.2 JavaScript 是什么 (18)1.2.1 JavaScript语⾔特点 (18)1.2.2 编译语⾔和脚本语⾔ (19)1.2.3 JavaScript应⽤场景 (19)1.2.4 JavaScript 与浏览器的关系 (20)1.2.5 JavaScript的组成 (20)1.3 初次体验JavaScript 代码 (21)1.3.1 JavaScript代码注意事项: (22)1.3.2 代码注释 (23)1.4 变量 (24)1.4.1 变量引⼊、声明和初始化 (24)1.4.2 变量在内存中的存储 (25)1.4.3 变量的命名规则和规范 (25)1.4 数据类型 (27)1.4.1 Number类型 (27)1.4.2 进制介绍(了解) (27)1.4.3 String类型 (30)1.4.4 Boolean类型 (32)1.4.5 Undefined和Null 321.4.6 数据类型转换 (32)1.4.8 获取变量的类型 (34)1.4.7 复杂数据类型 Object(对象) (35)1.5 运算符 (36)1.5.1 算术运算符 (36)1.5.2 ⼀元运算符 (36)1.5.3 逻辑运算符(布尔运算符) 371.5.4 关系运算符(⽐较运算符) 371.5.5 赋值运算符 (37)1.5.6 运算符的优先级 (37)第 2 章 (39)◄ JavaScript流程控制►. 392.1 顺序结构 (39)2.2 分⽀结构 (39)2.2.1 if语句 (39)2.2.2 三元运算符 (41)2.2.3 switch语句 (41)2.2.4 分⽀语句总结 (42)2.2.5 布尔类型的隐式转换 (43)2.3 循环结构 (43)2.3.1 while语句 (43)2.3.2 do...while语句 (44)2.3.3 for语句 (45)2.3.4 continue和break. 462.3 调试 (47)第 3 章 (48)◄数组、函数、作⽤域►. 483.1 数组 (48)3.1.1为什么要学习数组 (48)3.1.2 数组的概念 (48)3.1.3 数组的定义 (48)3.1.4 获取数组元素 (49)3.1.5 遍历数组 (50)3.1.6 数组中新增元素 (50)3.1.7 数组案例 (50)3.2 函数 (52)3.2.1 为什么要有函数 (52)3.2.2 什么是函数 (52)3.2.3 函数的定义 (53)3.2.4 函数的调⽤ (53)3.2.5 函数的参数 (54)3.2.6 函数的返回值 (55)3.2.7 arguments的使⽤ (56)3.2.8 匿名函数 (56)3.2.9 ⾃调⽤函数 (56)3.2.10 函数是⼀种数据类型 (57)3.3.1 全局变量和局部变量 (58)3.3.2 块级作⽤域 (59)3.3.3 词法作⽤域 (59)3.3.4 作⽤域链 (60)3.3.5 变量提升 (60)3.3.6 预解析 (61)第 4 章 (64)◄对象和内置对象►. 644.1 对象 (64)4.1.1 为什么要有对象 (64)4.1.2 什么是对象? (64)4.1.3 JavaScript中的对象 (65)4.1.4 对象创建⽅式 (65)4.1.5 属性和⽅法 (66)4.1.6 new关键字 (67)4.1.7 this详解 (67)4.1.8 对象操作 (68)4.1.8.1 遍历对象的属性 (68)4.1.8.2 删除对象的属性 (68)4.2 基本类型和复杂类型 (69)4.2.1 堆和栈 (69)4.2.2 值类型在内存中的存储 (69)4.2.3 引⽤类型在内存中的存储 (70)4.2.4 值类型作为函数的参数 (71)4.2.5 引⽤类型作为函数的参数 (72)4.3 内置对象 (73)4.3.1 Math对象 (73)4.3.2 Date对象 (74)4.3.3 Array对象 (76)4.3.4 基本包装类型 (79)4.3.5 String对象 (80)第 2 部分 (83)◄ Web API ►. 83Web API介绍 (83)API的概念 (83)Web API的概念 (83)JavaScript的组成 (83)第 5 章 (85)◄ BOM►. 855.1 BOM介绍 (85)5.1.1 BOM的概念 (85)5.1.2 BOM的顶级对象window.. 85 5.2 对话框 (87)5.2.1 alert() 875.2.2 prompt() 885.2 页⾯加载事件 (89)5.3 定时器 (89)5.4 location对象 (90)5.5 history对象 (93)5.6 navigator对象 (94)第 6 章 (97)◄ DOM和事件►. 976.1 DOM (97)6.1.1 DOM的概念 (97)6.1.2 模拟⽂档树结构 (98)6.2.3 DOM经常进⾏的操作 (99)6.2 事件 (101)6.2.1 事件的基本使⽤ (101)6.3 属性操作 (102)6.3.1 ⾮表单元素的属性 (102)6.3.2 innerText、textContent 1056.3.3 innerHTML和innerText的区别 (105)6.3.4 表单元素属性 (106)6.3.5 ⾃定义属性操作 (110)6.3.6 样式操作 (112)6.3.7 类名操作 (112)6.3.8 创建元素的三种⽅式 (114)6.4 节点操作 (116)6.4.1 节点的基本操作 (116)6.4.2 节点属性操作 (118)6.4.3 节点层级 (118)6.4.3.1 获取单个的⼦节点 (118)6.4.3.2 获取所有的⼦节点 (119)6.4.3.3 获取⽗节点 (119)6.5 事件详解 (121)6.5.1 注册/移除事件的三种⽅式 (121)6.5.2 事件冒泡 (123)6.5.3 事件的三个阶段 (125)6.5.4 事件对象的属性和⽅法 (127)6.5.4.1 事件句柄 (Event Handlers). 127 6.5.4.2 常⽤的⿏标和键盘属性 (128)6.5.4.3 event属性和⽅法总结 (129)6.5.4.4 案例 (130)6.6 偏移量 (132)6.6.1 offset系列:获取元素 (132)6.6.2 client系列可视区域 (134)6.6.3 滚动偏移:scroll系列 (135)6.7 综合案例 (136)6.7.1 轮播图 (136)6.7.2 固定导航栏 (142)◄ Javascript ⾼级►. 149第 7 章 (150)◄ JavaScript ⾯向对象编程►. 1507.1 ⾯向对象介绍 (150)7.2 创建对象的⽅式 (151)7.2.1 字⾯量的⽅式 (151)7.2.2 调⽤系统的构造函数 (152)7.2.3 ⾃定义构造函数⽅式 (152)7.2.4 ⼯⼚模式创建对象 (153)7.2.5 ⼯⼚模式和⾃定义构造函数创建对象的区别 (153)7.2.6 构造函数和对象的关系 (154)7.3 原型的引⼊ (155)7.4 ⾯向过程和⾯向对象 (156)7.5 构造函数、原型对象、实例对象之间的关系 (158)7.6 利⽤原型共享数据 (158)7.6.1 原型的简单语法 (158)7.6.2 原型中⽅法的使⽤ (159)7.6.3 内置对象的原型⽅法 (160)7.6.4 把局部变量变成全局变量 (161)7.7 原型及原型链 (162)7.7.1 原型指向可以改变 (162)7.7.2 实例对象属性和原型对象属性重名问题 (164)7.7.3 通过⼀个HTML的元素对象来查看原型链 (166)7.8 实现继承 (166)7.8.1 原型实现继承 (167)7.8.2 构造函数实现继承 (167)7.8.3 组合继承 (169)7.8.4 拷贝继承 (170)第 8 章 (172)◄函数进阶和其它►. 1728.1 函数的定义⽅式 (172)8.2 函数的调⽤⽅式 (173)8.2.1 函数内 this 指向的不同场景 (173)8.2.2 严格模式 (174)8.2.3 函数也是对象 (175)8.2.4 数组中函数的调⽤ (176)8.2.5 apply和call调⽤ (177)8.2.6 bind⽅法 (179)8.2.7 call、apply、bind的区别 (180)8.3 函数中⾃带的属性介绍 (180)8.4 函数作为参数使⽤ (181)8.3 函数作为返回值使⽤ (182)8.4 作⽤域和作⽤域链 (183)8.5 闭包 (184)8.8 浅拷贝和深拷贝 (188)8.9 递归案例 (191)8.9.1 遍历DOM树 (191)8.9.2 ⽣成菜单导航 (192)8.10 伪数组和数组 (194)8.11 JavaScript 垃圾回收机制 (196)8.11.1 可访问性(Reachability) (196)8.11.2 ⼀个简单⽰例 (196)8.11.3 两个引⽤ (197)8.11.4 相互引⽤的对象 (197)8.11.5 孤岛(Unreachable island) 199 8.11.6 内部算法 (200)第 9 章 (203)◄正则表达式►. 2039.1 正则表达式简介 (203)9.1.1 什么是正则表达式 (203)9.1.2 正则表达式的作⽤ (203)9.1.3 正则表达式的特点 (203)9.1.4 正则表达式的组成 (204)9.1.5 常⽤案例 (205)9.1.6 如何验证正则表达式的正确性 (206)9.1 JavaScript 中使⽤正则表达式 (206)9.1.1 创建正则对象 (206)9.1.2 正则匹配 (207)9.1.3 正则提取 (207)9.1.4 正则替换 (209)9.3 正则表达式使⽤案例 (210)9.3.1 密码强度验证 (210)9.3.2 表单验证 (214)第 10 章 (217)◄贪吃蛇案例►. 21710.1 ⽰例介绍 (217)10.2 实现步骤 (219)10.2.1 画地图和操作按钮 (219)10.2.2 封装⾷物对象 (220)10.2.3 封装⼩蛇对象 (222)10.2.4 封装游戏对象 (224)10.2.5 游戏调⽤ (227)第 4 部分 (228)◄ Javascript下⼀代标准►. 228第 11 章 (229)◄ ES6~ES10新特性介绍►. 22911.1 ES6新特性 (229)11.1.1 Arrows(箭头函数) (229)11.1.3 模板字符串 (230)11.1.4 函数的参数默认值 (230)11.1.5 延展操作符(Spread operator) 231 11.1.6 对象解构 (231)11.1.7 for...of 和 for...in. 23111.1.8 对象属性简写 (232)11.1.9 Promise. 23211.1.10 class(类) (235)11.1.11 Module (模块化) 23611.2 ES7新特性 (238)11.2.1 Array.prototype.includes() 23811.2.2 指数操作符**. 23811.3 ES8新特性 (238)11.3.1 async await 23911.3.2 Object.values/Object.entries. 241 11.3.3 padStart 和 padEnd. 24111.4 ES9新特性 (242)11.4.1 for await...of. 24211.4.2 Object Rest Spread. 24311.4.3 Promise.prototype.finally() 24511.4.4 新的正则表达式特性 (246)11.5 ES10新特性 (248)11.5.1 Array.prototype.flat() 24811.5.2 Array.prototype.flatMap() 24911.5.3 String.trimStart 和 String.trimEnd. 249 11.5.4 String.prototype.matchAll. 24911.5.5 修改 catch 绑定 (250)11.5.6 新的基本数据类型 BigInt. 25011.5.7 Object.fromEntries(). 25011.5.8 Symbol.prototype.description. 251 11.5.9 Function.prototype.toString() 251第 12 章 (252)◄ TypeScript简单介绍►. 25212.1 TypeScript简介 (252)12.1.1 安装TypeScript 25212.1.2 开始我们的第⼀个TypeScript程序 (253)12.1.3 类型注解 (255)12.1.4 接⼝ (255)12.1.5 类 (256)12.2 TypeScript基础类型 (257)12.2.1 元组 Tuple. 25712.2.2 枚举 (257)12.2.3 任意值any. 25812.2.4 空值 (259)12.2.5 Null 和 Undefined. 25912.2.7 类型断⾔ (259)参考⽂献 (261)。
第7章 用户界面† ObjectARX 程序中使用MFC 资源。
† AdUi 和AcUi 界面类。
†模式对话框与非模式对话框。
Microsoft 基础类库(MFC)为开发者提供了建立标准用户界面的方法,ObjectARX 也为开发者提供了一系列基于MFC 的用户界面类,可以利用这些类开发与Autodesk 用户界面完全一致的用户界面。
本章我们主要讨论如何使用AutoCAD 内部的MFC 系统来生成AutoCAD 风格的用户界面。
7.1 ObjectARX 应用程序中使用MFC开发者可以利用MFC 提供的界面类快速方便的创建标准用户界面,另外ObjectARX 还提供了基于MFC 的界面类的扩展类,其中CAdUi 类是适用与所有Autodesk 应用程序的界面类,而CAcUi 类则派生于CAdUi 类,是专为AutoCAD 设计的界面类,它建立在AdUi 框架之上,提供AutoCAD 特定的外观和行为。
开发者可以使用ObjectARX 提供的这些界面类开发出与AutoCAD 内部相同的用户界面。
需要注意的是,开发者在使用向导创建工程的时候,需要设定工程支持MFC ObjectARX ,只有这样才能使用MFC 的用户界面类和ObjectARX 中提供的的AdUi 和AcUi 界面类,如图7-1。
7.1.1 资源管理当ObjectARX 应用程序与AutoCAD 的其它应用程序共享MFC 库的时候,资源管理是一个重要任务,当应用程序执行资源定位时,必须事先在MFC 检查序列中插入自己的模块。
因此,我们需要管理程序中的资源,以免与AutoCAD 或者其它ObjectARX 应用程序之间发生冲突。
本章简介8图7-1 设定ObjectARX应用程序支持MFCObjectARX中提供两种管理资源的方法:显式管理资源和隐式管理资源。
显式管理资源方法在执行自定义资源操作之前,需要调用函数AfxSetResourceHandle()设定自定义资源作为系统资源,在这之前还应该调用函数AfxGetResourceHandle()获得当前的系统资源,暂时保存,在执行完任何需要自定义资源的函数之后,应该立即恢复先前的系统资源。
Web前端进阶之JavaScript知到章节测试答案智慧树2023年最新济南大学第一章测试1.以下哪个选项是JavaScript的特点( )参考答案:具有以上各种特点2.编辑JavaScript程序时( )。
参考答案:可以使用任何一种文本编辑器3.下面的JavaScript语句书写正确的是()。
参考答案:null4.下面有关JavaScript说法错误的是()。
参考答案:可以在JavaScript 代码中使用双反斜杠对代码行进行换行。
5.下列选项中,有关JavaScript说法错误的是()。
参考答案:加入了JavaScript特效的页面,称为动态页面第二章测试1.在以上代码段中,哪些变量是全局变量?()参考答案:只有a2.以下描述中错误的是()。
参考答案:alert(typeof(function() {})) 显示的内容为:Function3.以下哪个语句打印出来的结果是false?()参考答案:alert(isNaN(true));4.JavaScript中, 以下声明变量的语句哪个不正确? ( )参考答案:null5.以下代码,哪个结果是正确的?var a='123.5abc' , b='100abc';6、 alert(parseInt(a)+Number(b)); ()参考答案:NaN6.以下哪个单词不属于javascript保留字?()参考答案:base7.要检测值是否为 NaN,应使用()函数。
参考答案:isNaN8.以下哪个变量名是非法的?( )参考答案:2sum9.(778>787)?5:2 的结果是( ) 。
参考答案:210.在 JavaScript 表达式中 12+"12"+"5"的结果是( )。
参考答案:1212511.分析 javascript 代码段,输出结果是var a="125.8765";c=parseInt(a);d=parseFloat(a);document.write(c+" "+d) ( )参考答案:125 125.876512.分析下面的 JavaScript 代码段,输出结果是a=eval("3+6+7");document.write(a); ( ) 。
第7章 Window及相关顶级对象在“JavaScript基于对象编程”一章中,读者基本理解了Window相关顶级对象及它们之间的关系。
在“文档结构模型(DOM)”一章中,继续加深了这种认识并从对象模型层次关系的角度重点分析了对象的产生过程。
本章将从实际应用的角度出发,讨论Window、Frames、Navigator、Screen、History、Location、Document等相关顶级对象的属性、语法及如何创建、使用等问题。
通过本章的学习,读者应能使用JavaScript脚本生成并管理浏览器基本框架,并且熟悉框架之间的通信方法。
7.1 顶级对象模型参考在DOM架构中,Window、Frames、Navigator等顶级对象产生于浏览器载入文档至关闭文档期间的不同阶段,并起着互不相同且不可代替的作用,如Window对象在启动浏览器载入文档的同时生成,与当前浏览器窗口相关,包含窗口的最小最大化、尺寸大小等属性,同时具有关闭窗口、创建新窗口等方法;而Location对象以URL的形式载入当前窗口,并保存正在浏览的文档的位置及其构成信息,如协议、主机名、端口、路径、URL的查询字符串部分等,顶级模型的结构如图7.1所示。
图7.1 顶级对象模型层次结构可见,Window对象在层次中的最上层,而Document对象处于顶级对象的最底层。
一般说来,Frames对象在Window对象的下层,但当目前文档包含框架集时,该框架集中的每个框架都包含单独的Window对象;每个Window对象都直接包含一个(或者间接包含多个)Document对象。
首先来了解Window对象。
7.2 Window对象简而言之,Window对象为浏览器窗口对象,为文档提供一个显示的容器。
当浏览器载入目标文档时,打开浏览器窗口的同时,创建Window对象的实例,Web应用程序开发者可通过JavaScript脚本引用该实例,从而进行诸如获取窗口信息、设置浏览器窗口状态或者新建浏览器窗口等操作。
同时,Window对象提供一些方法产生图形用户界面中用于客户与页面进行交互的对话框(模式或者非模式),并能通过脚本获取其返回值然后决定浏览器后续行为。
由于Window对象是顶级对象模型中的最高级对象,对当前浏览器的属性和方法,以及当前文档中的任何元素的操作都默认以Window对象为起始点,并按照对象的继承顺序进行访问和相关操作,所以在访问这些目标时,可将引用Window对象的代码省略掉,如在需要给客户以警告信息的场合调用Window对象的alert()方法产生警告框,直接使用alert(targetStr)语句,而不需要使用window.alert(targetStr)的方法。
但在框架集或者父子窗口通信时,须明确指明要发送消息的窗口名称。
7.2.1 交互式对话框使用Window对象产生用于客户与页面交互的对话框主要有三种:警告框、确认框和提示框等,这三种对话框使用Window对象的不同方法产生,功能和应用场合也不大相同。
1.警告框警告框使用Window对象的alert()方法产生,用于将浏览器或文档的警告信息(也可能不是恶意的警告)传递给客户。
该方法产生一个带有短字符串消息和“确定”按钮的模式对话框,且单击“确定”按钮后对话框不返回任何结果给父窗口。
此方法的语法如下:window.alert(Str);alert(Str);其中参数可以是已定义变量、文本字符串或者是表达式等。
当参数传入时,将参数的类型强制转换为字符串然后输出:var MyName="YSQ";var iNum=1+1;alert("\nHello " +MyName+ ":\n MyResult: 1+1=" +iNum+ "\n");上述代码运行后,弹出警告框如图7.2所示。
图7.2 警告框实例注意:模式对话框由父窗口创建,并使父窗口无效直到该对话框被关闭之后父窗口才能被用户激活,其内部拥有消息循环;非模式对话框由父窗口创建,对话框创建后立即返回,并与父窗口共用一个消息循环,在对话框被关闭之前,父窗口能被激活进行各种操作。
2.确认框确认框使用Window对象的conform()方法产生,用于将浏览器或文档的信息(如表单提交前的确认等)传递给客户。
该方法产生一个带有短字符串消息和“确定”、“取消”按钮的模式对话框,提示客户选择单击其中一个按钮表示同意该字符串消息与否,“确定”按钮表示同意,“取消”按钮表示不同意,并将客户的单击结果返回。
此方法的语法如下:answer=window.confirm(Str);answer=confirm(Str);其中参数可以是已定义变量、文本字符串或者是表达式等。
当参数传入时,将参数的类型强制转换为字符串作为需要确认的问题输出。
该方法返回一个布尔值表示消息确认的结果,true表示客户同意了该消息,而false表示客户不同意该消息或确认框被客户直接关闭。
考察下面代码:var MyName="YSQ";var iNum=1+1;var answer=confirm("\nHello " +MyName+ ":\n MyResult: 1+1=" +iNum+ " ?\n");if(answer==true)alert("\n客户确认信息: \n\n"+" 算术运算1+1=2成立!");elsealert("\n客户确认信息: \n\n"+" 算术运算1+1=2不成立!");程序运行后,弹出确认框如图7.3所示。
图7.3 确认框实例若单击“确定”按钮,将弹出警告框如图7.4所示。
图7.4 单击“确定”按钮,弹出警告框若单击“取消”按钮或直接关闭该确认框,将弹出警告框如图7.5所示。
图7.5 单击“取消”按钮或直接关闭确认框,弹出警告框值得注意的是,确认框中事先设定的问题的提问方法有可能严重影响这个确认框的实用性,程序员在编制程序时,一定要将问题的返回值代表的客户意图与下一步的动作联系在一起,避免对结果进行完全相反的处理。
3.提示框提示框使用Window对象的prompt()方法产生,用于收集客户关于特定问题而反馈的信息,该方法产生一个带有短字符串消息的问题和“确定”、“取消”按钮的模式对话框,提示客户输入上述问题的答案并选择单击其中一个按钮表示确定还是取消该提示框。
如果客户单击了“确定”按钮则将该答案返回,若单击了“取消”按钮或者直接关闭则返回null值。
此方法的语法如下:returnStr=window.prompt(targetQuestion,defaultString);returnStr=prompt(targetquestion,default string);该方法通过参数targetQuestion传入一个字符串,代表需要客户回答的问题。
通过参数defaultString传入一个默认的字符串,该参数一般可设定为空。
当客户填入问题的答案并单击“确定”按钮后,该答案作为prompt()方法的返回值赋值给returnStr;当客户单击“取消”按钮时,prompt()方法返回null。
考察如下代码:var answer=prompt("算术运算题目: 1+1 = ?");if(answer==2)alert("\n算术运算结果 : \n\n"+"恭喜您,你的答案正确! ");else if(answer==null)alert("\n算术运算结果 : \n\n"+"对不起,您还没作答! ");elsealert("\n算术运算结果 : \n\n"+"对不起,您的答案错误! ");程序运行后,弹出提示框如图7.6所示。
图7.6 提示框实例如果在上述提示框填入正确结果“2”,并单击“确定”按钮,弹出警告框如图7.7所示。
图7.7 输入正确结果时弹出警告框如果在上述提示框输入错误的答案,并单击“确定”按钮,弹出警告框如图7.8所示。
图7.8 输入错误结果时弹出警告框如果在上述提示框中单击“取消”按钮或直接关闭,弹出警告框如图7.9所示。
图7.9 单击“取消”按钮或直接关闭时弹出警告框使用prompt()方法生成提示框返回客户的答案时,应注意考察提示框的返回值,然后采取进一步的动作。
4.实例:学生信息采集系统综合以上三种客户与浏览器交互的方法,可编制一个学生信息采集系统,该系统实现学生信息录入功能,并在数据合法性的检验方面进行了充分的考虑。
考察系统中采集学生信息并验证数据合法性的页面代码://源程序7.1<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN""/TR/REC-html140/strict.dtd"><html><head><meta http-equiv=content-type content="text/html; charset=gb2312"><title>Sample Page!</title><script language="JavaScript" type="text/javascript"><!--//检查姓名长度是否合法function CheckName(str){var nbool;var strLength=str.length;if(strLength>3&&strLength<9)nbool=true;elsenbool=false;return nbool;}//检查性别是否合法function CheckSex(sex){var nbool;if(sex=="male"||sex=="female")nbool=true;elsenbool=false;return nbool;}//检查学号格式是否正确function CheckNumber(num){var nbool;var numLength=num.length;var index=num.indexOf("2001");if(numLength!=8||index==-1)nbool=false;elsenbool=true;return nbool;}//检查邮箱格式是否正确function CheckEmail(EmailAddr){var nbool;var strLength=EmailAddr.length;var index1=EmailAddr.indexOf("@");var index2=EmailAddr.indexOf(".",index1);if(index1==-1||index2==-1||index2<=index1+1||index1==0||index2==strLength-1) nbool=false;elsenbool=true;return nbool;}//操作函数function MyMain( ){var MyName=prompt("姓名 : (4到8个字符)");var nName=CheckName(MyName);while(nName==false){var NameMsg="姓名字段验证 : \n\n";NameMsg+="结果 : 格式错误.\n";NameMsg+="格式 : 长度必须为4到8个字符.\n";NameMsg+="处理 : 单击“确定”按钮返回修改.\n";alert(NameMsg);MyName=prompt("姓名 : (4到8个字符)");nName=CheckName(MyName);}var MySex=prompt("性别 : (male或female)","male");var nSex=CheckSex(MySex);while(nSex==false){var SexMsg="性别字段验证 : \n\n";SexMsg+="结果 : 格式错误.\n";SexMsg+="格式 : 必须为''male''或''famale''.\n";SexMsg+="处理 : 单击“确定”按钮返回修改.\n";alert(SexMsg);MySex=prompt("性别 : (male或female)","male");nSex=CheckSex(MySex);}var MyNum=prompt("学号 : (形如2001****)","2001");var nNum=CheckNumber(MyNum);while(nNum==false){var NumMsg="学号字段验证 : \n\n";NumMsg+="结果 : 格式错误.\n";NumMsg+="格式 : 必须形如''2001****''格式. \n";NumMsg+="处理 : 单击“确定”按钮返回修改.\n";alert(NumMsg);MyNum=prompt("学号 : (形如2001****)","2001");nNum=CheckNumber(MyNum);}var MyEmail=prompt("邮箱 : (形如zangpu@)","@");var nEmail=CheckEmail(MyEmail);while(nEmail==false){var EmailMsg="邮箱字段验证 : \n\n";EmailMsg+="结果 : 格式错误.\n";EmailMsg+="格式 : 1、邮件地址中同时含有'@'和'.'字符.\n";EmailMsg+=" 2、'@'后必须有'.',且中间至少间隔一个字符. \n";EmailMsg+=" 3、'@'不为第一个字符,'.'不为最后一个字符.\n";EmailMsg+="处理 : 单击“确定”按钮返回修改.\n";alert(EmailMsg);MyEmail=prompt("邮箱 : ","@");nEmail=CheckEmail(MyEmail);}var msg="\n学生信息 : \n\n"msg+="姓名 : "+MyName+"\n";msg+="性别 : "+MySex+"\n";msg+="学号 : "+MyNum+"\n";msg+="邮箱 : "+MyEmail+"\n";alert(msg);}//--></script></head><body><form name="MyForm"><input type="button" value="测试" onclick="MyMain()"></body></html>程序运行后,单击页面中的“测试”按钮,弹出“姓名”提示框提示学生输入姓名,如图7.10所示。