JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。
常见的 JavaScript 验证的这些典型的表单数据有:
用户是否已填写表单中的必填项目?
用户输入的邮件地址是否合法?
用户是否在数据域 (numeric field) 中输入了文本?
function validate_required(field,alerttxt)
{
with (field)
{
if (value == null || value == "")
{
alert(alerttxt);
return false;
}
else
{
return true;
}
}
}
有个经典的关于邮箱地址的验证:
function validate_email(field,alerttxt)
{
with (field)
{
apos = value.indexOf("@")
dotpos = value.lastIndexOf(".")
if (apos<1||dotpos-apos<2)
{
alert(alerttxt);
return false;
}
else
{
return true;
}
}
}
一开始对上面的函数并不陌生,但是仔细一瞅发现中间多了一个
with(field)
查阅资料看了一下JS中的with语句的用法:
with语句为一个或一组语句指定默认对象。
with语句可以方便地用来引用某个特定对象中已有的属性,不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。
with的语句结构:
with(object instance)
{
//代码块
}
对比下面二段代码会发现功能是一样的,但是明显有with语句的代码可读性更强,并且易于理解。
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
with (Math)
{
x = cos(3 * PI) + sin(LN10);
y = tan(14 * E);
}
PS:但是with语句即使带来了很多方便的地方,它也有不好的之处:with语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。
除了with有引用对象的作用,在JS中另一个this语句也很常见。
this 对象 是返回“当前”对象。在不同的地方,this代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
this的这个浅层意思和OC语言中的self很类似。当然这里仅仅只是用于类比理解。
下面有个this常见的用法,用于立刻检测表单输入的有效性。
<script>
...
function check(formObj) {
...
}
...
</script>
<body ...>
...
<form ...>
...
<input type="text" ... onchange="check(this.form)">
...
</form>
...
</body>