由于JavaScript 是面向对象的,它将每种HTML 表单元素——也就是按钮、选择框、文本域、甚至是表单本身——都看作是包含自身数据的一个独立对象。有了JavaScript,你就能在用户的计算机上,检查任何HTML 对象的数据,并根据结果做出决定。例如,运用域级的有效性检查(field-level validation),你能确保用户是否在一字段键入数字。

为了执行域级的有效性检查,你需要定义一个包含有效性检查逻辑的JavaScript 函数,然后在用户落下某个特定的HTML 域没有填写时(按键盘离开或是光标移开),就触发该项函数。一般来讲,这意味着使用一个onChange(可以检测出用户何时改变域)或是onBlur(检测用户何时离开、或是「模糊」某个特定域)这类与HTML 文本元素相关关的事件处理器,来调用你的函数。

为了显示这些是如何工作的,让我们先请用户挑选他们想赞助的新人才的个数。然后,我们将检查确认他们是否有键入了一个值。

首先,我们定义一个叫做exists() 的函数(即“用户的输入是否存在?”)。

function exists(userEntry, message) {

函数exists() 接受两个参数。第一个参数“userEntry(用户输入)”,代表需要验证是否存在的值。另外一个参数“message(信息)”,代表如果值不存在,要在屏幕上显示的错误信息。

然后,我们使用关键字var声明两个变量——一个叫做aCharExists,另一个叫做entry(输入)。

varaCharExists = 0; var entry = userEntry;

变量aCharExists是我们的是/否变量。如果用户确实输入了数据,我们就将变量的值设定为1,以代表“是”。要是用户没有输入数据,我们将变量数值保持原来的0,表示“否”。我们会将用户输入的任何字符保存在变量 entry 中。

JavaScript 变量可以是弱类型的,也就是说你不需在变量声明之中立即指定自己想要变量所包含的值的类型(基于数字、字符的、或是其它)。相反地,每当你为变量赋值时,它们可以被隐式地设定为所赋值的类型。例如,aCharExists的赋值为0,那么暗示的类型就是数字。

在exists() 函数之后,是一个 if 语句:

if (entry) {
for (vari=0; i<entry.length; i++) {
//spaces don't count as "existence"
if (entry.charAt(i) != " ") {
aCharExists = 1;
}
}
}

前面的 if 语句保证只包含空格的值不计入真正的值。逻辑流程如下:

if(entry) {

如果 entry 的值存在,那么…

for (vari=0; i<entry.length; i++) {
//spaces don't count as "existence"
if (entry.charAt(i) != " ") {
aCharExists = 1;
}
}
}

查看 entry 的值,每次分析一具字符。vari=0 命令指定了一个计数器。只要i比 entry 的字符的个数(由 length 属性指出)小,我们就会对其检查,以确认非空格的字符是等于位于为i的字符。此外,if (entry.charAt(i) !=" "的意思,是“如果位置i处的字符不等于空格…”,如果一个字符存在,那么我们则将变量aCharExists设为1(表示“是的,有字符存在”)。然后,我们再回头进行一次,直到已经检查过 entry 中的每一个字符。

最后,该函数的内容是:

if (!aCharExists) {
alert(message);
}
}

这就是说如果aCharExists是假(在上面的例子中,! 表示“假”或“不”),我们就弹出一个警告信息。

一旦我们定义了exists() 函数,就可以从一个与HTML 元素有关的事件处理器上调用这个函数,如下所示:

What type of brain do you want? (r=right/l=left)
<INPUT TYPE="text" NAME="typeField" VALUE="" SIZE=10 onChange="exists(this.value, 'Please enter the type of brain.');">

在上面所示的HTML 片段中,exists() 函数是经由与typeField文本元素关联的onChange事件处理器所调用的。这就是说当用户改变了输入域的值,并且从该域移开时,它就会调用exists() 函数。倘若输入域没有值存在,一个警告信息就会提醒用户输入值。