我正在尝试进行一些非常简单的表单验证,我当前的问题是我的window.onload
函数没有调用我指定的函数。
当我用firebug观察逻辑流时,它只是跳到代码的末尾。
以下是我的代码示例:
window.onload = init;
function init() {
var regForm = document.getElementById("registerform");
regForm.onsubmit = validatepostcode();
}
function validatepostcode() {
var postCode = document.getElementById("postcode");
var postCodeStr = postCode.charAt(0);
var state = document.getElementById("state");
var result = true;
if (postCodeStr == 3 || 8 && state == "Vic") {
result = true;
} else if (postCodeStr == (1 || 2) && state == "NSW") {
result = true;
} else if (postCodeStr == (4 || 9) && state == "QLD") {
result = true;
} else if (postCodeStr == 0 && state == "NT" || state == "ACT") {
result = true;
} else if (postCodeStr == 6 && state == "WA") {
result = true;
} else if (postCodeStr == 5 && state == "SA") {
result = true;
} else if (postCodeStr == 7 && state == "TAS") {
result = true;
} else
result = false;
if (result = false) {
alert("Your postcode does not match your state")
}
}
答案 0 :(得分:2)
五个问题:
在init
中,你有这个:
regForm.onsubmit = validatepostcode();
调用validatepostcode
并将其返回值放在onsubmit
中。你可能意味着把它放在函数本身,而不是它的返回值。删除括号:
regForm.onsubmit = validatepostcode;
在validatepostcode
中,您可以像这样获取元素:
var postCode = document.getElementById("postcode");
...但是然后尝试将它们用作值,如下所示:
var postCodeStr = postCode.charAt(0);
但元素和该元素的当前值不是一回事。更有可能的是,您打算在第一行检索值:
var postCode = document.getElementById("postcode").value;
同样适用于state
。
在validatepostcode
中,您有这样的行:
} else if (postCodeStr == (1 || 2) && state == "NSW") {
具体而言,1 || 2
不会像那样工作。它会像布尔一样看待它们并说“一两个?好吧,他们都是真实的......真的是这样!“而且你基本上都在做
} else if (postCodeStr == true && state == "NSW") {
(实际上,它使用的是1
,而不是true
,因为第一个操作数是真的,但这不是重要的一点。)
你不必使用那种缩写符号,而是必须用手写出来:
} else if ((postCodeStr == 1 || postCodeStr == 2) && state == "NSW") {
您在此处混淆了=
和==
:
if(result=false){
=
会将result
设置为false
并始终保持条件false
。将其更改为==
以测试相等性:
if(result==false){
您可能打算在结尾处返回result
,以防止在出现验证错误时提交表单。应用其他更改后,如果出现验证错误,您会收到提醒,但无论如何都会继续提交。因此,请在return result
函数的末尾添加validatepostcode
。