我正在尝试做一些非常简单的表单验证,我当前的问题是我的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

09-16 19:56