我正在尝试做一些非常简单的表单验证,我当前的问题是我的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")
}
}
最佳答案
五个问题:
在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
。