三个问题:
它是getElementById
(注意t
),而不是geElementById
。
您缺少}
功能的结尾。
表单的结束标签是</from>
, 不是</form>
您的浏览器可能至少会告诉您前两个:在所有现代浏览器中,都有一整套开发/调试工具。对于 IE 和 Chrome(至少),只需按 F12。对于其他人,请查看菜单。
修复这些,它就可以工作了:Live Copy | 直播源
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Example</title>
</head>
<body>
<form name="signup" action="singup_i" method="post">
First name:<input type="text" id="fn" onblur="validatebox()" name="fn" size="15"/>
<label id="error_fn"></label>
<input type="submit" value="submit"> <input type="reset" value="reset">
</from>
<script>
function validatebox() {
var fn = document.getElementById("fn").value;
if (fn == null || fn == "") {
document.getElementById("error_fn").innerHTML = "please fill your first name";
document.getElementById("error_fn").style.color = "red";
}
else {
document.getElementById("error_fn").innerHTML = "OK";
document.getElementById("error_fn").style.color = "green";
}
}
</script>
</body>
</html>
请注意,我已经重新格式化了函数代码,所以更容易看到块(因此看到结尾}
)。
error_fn
但是我可以建议不要重复查找,并且不要将label
元素用于标记字段以外的其他内容:Live Copy | 直播源
<form name="signup" action="singup_i" method="post">
First name:<input type="text" id="fn" onblur="validatebox()" name="fn" size="15"/>
<span id="error_fn"></span>
<input type="submit" value="submit"> <input type="reset" value="reset">
</form>
<script>
function validatebox() {
var fn = document.getElementById("fn").value;
var err = document.getElementById("error_fn");
if (fn == null || fn == "") {
err.innerHTML = "please fill your first name";
err.style.color = "red";
}
else {
err.innerHTML = "OK";
err.style.color = "green";
}
}
</script>
最后,fn
将永远不会null
,因为value
文本字段的属性永远不会是null
; 它总是一个字符串。该字符串可能为空。在这种情况下,最简单的测试就是if (!fn) { /* missing */ } else { /* present */}
,它将测试fn
它是否是null
, undefined
, 0
, ""
, false
, 或NaN
(其中,它只能是""
,因为又value
总是一个字符串)。当然," "
(一个空格)会过去的。