麻烦基本的JavaScript

时间:2014-04-18 05:00:18

标签: javascript

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

1 个答案:

答案 0 :(得分:2)

五个问题:

  1. init中,你有这个:

    regForm.onsubmit = validatepostcode();
    

    调用validatepostcode并将其返回值放在onsubmit中。你可能意味着把它放在函数本身,而不是它的返回值。删除括号:

    regForm.onsubmit = validatepostcode;
    
  2. validatepostcode中,您可以像这样获取元素:

    var postCode = document.getElementById("postcode");
    

    ...但是然后尝试将它们用作值,如下所示:

    var postCodeStr = postCode.charAt(0);
    

    但元素和该元素的当前值不是一回事。更有可能的是,您打算在第一行检索值:

    var postCode = document.getElementById("postcode").value;
    

    同样适用于state

  3. 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") {
    
  4. 您在此处混淆了===

    if(result=false){
    

    =会将result设置为false并始终保持条件false。将其更改为==以测试相等性:

    if(result==false){
    
  5. 您可能打算在结尾处返回result,以防止在出现验证错误时提交表单。应用其他更改后,如果出现验证错误,您会收到提醒,但无论如何都会继续提交。因此,请在return result函数的末尾添加validatepostcode