Appearance
系统对话框
本节目标:理解“系统对话框”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。
浏览器通过alert()、confirm()和promt()方法可以调用系统对话框向用户显示消息。系统对话框与在浏览器中显示的网页没有关系,也不包含HTML。它们的外观由操作系统及(或)浏览器设置决定,而不是由CSS决定。此外,通过这几个方法打开的对话框都是同步和模态的,也就是说,显示这些对话框的时候代码会停止执行,而关掉这些对话框后代码又会恢复执行。
alert ()方法 这个方法接受一个字符串并将其显示给用户。具体来说,调用alert ()方法的结果就是向用户显示一个系统对话框,其中包含指定的文本和一个OK (“确定”)按钮。 例如,alert ('Hello world!')会在Windows XP系统的IE中生成如图8~3所示的对话框
通常使用alert ()生成的“警告”对话框向用户显示一些他们无法控制的消息,例如错误消息。而用户只能在看完消息后关闭对话框。
第二种对话框是调用confirm()方法生成的。从向用户显示消息的方面来看,这种“确认”对话 框很像是一个“警告”对话框。但二者的主要区别在于“确认”对话框除了显示OK按钮外,还会显示Cancel('取消')按钮,两个按钮可以让用户决定是否执行给定的操作。例如,confirm('Areyousure?')会显示如图X所示的确认对话框。
为了确定用户是单击了 OK还是Canel,可以检査confirm。方法返回的布尔值:true表示单击
了 OK, false表示单击了Cancel或单击了右上角的X按钮。确认对话框的典型用法如下。
if (confirm("Are you sure?")) {
alert("I'm so glad you're sure! ");
} else {
alert("I'm sorry to hear you're not sure. ");
}
这种模式经常在用户想要执行删除操作的时候使用,例如删除电子邮件。
最后一种对话框是通过调用prompt()方法生成的,这是一个“提示”框,用于提示用户输入一些文本。提示框中除了显示OK和Cancel按钮之外,还会显示一个文本輸入域,以供用户在其中输入内容。prompt()方法接受两个参数:要显示给用户的文本提示和文本输入域的默认值(可以是一个空字符)调用prompt("What's your name?", "Michael")会得到如下图所示的对话框:如果用户单击了OK按钮,则prompt()返回文本输入域的值;如果用户单击了 Cancel或没有单击OK而是通过其他方式关闭了对话框,则该方法返回null。下面是一个例子。
var result = prompt("What is your name? ", "");
if (result !== null) {
alert("Welcome, " + result);
}
综上所述,这些系统对话框很适合向用户显示消息并请用户作出决定。由于不涉及HTML、CSS或JavaScript,因此它们是増强Web应用程序的一种便捷方式。
除了上述三种对话框之外,Google Chrome浏览器还引入了一种新特性。如果当前脚本在执行过程中会打开两个或多个对话框,那么从第二个对话框开始,每个对话框中都会显示一个多选框,以便用户阻止后续的对话框显示,除非用户刷新页面:如果用户勾选了其中的复选框,并且关闭了对话框,那么除非用户刷新页面,所有后续的系统对话框(包括警吿框、确认框和提示框)都会被屏蔽。Chrome没有就对话框是否显示向开发人员提供任何信息。由于浏览器会在空闲时重置对话框计数器,因此如果两次独立的用户操作分别打开两个警吿框,那么这两个警告框中都不会显示复选框。而如果是同一次用户操作会生成两个警吿框,那么第二个警吿框中就会显示复选框。这个新特性出现以后,IE9和Fireft«4也实现了它。
还有两个可以通过JavaScript打开的对话框,即“査找”和“打印"。这两个对话框都是异步显示的,能够将控制权立即交还给脚本。这两个对话框与用户通过浏览器菜单的“查找”和“打印”命令打开的对话框相同。而在JavaScript中则可以像下面这样通过window对象的find()和print()打开它们:
// 显示打印对话框
window.print();
// 显示查找对话框
window.find();
这两个方法同样不会就用户在对话框中的操作给出任何信息,因此它们的用处有限。另外,既然这两个对话框是异步显示的,那么Chrome的对话框计数器就不会将它们计算在内,所以它们也不会受用户禁用后续对话框显示的影响。