Javascript数组参数问题

时间:2011-07-27 18:27:29

标签: javascript arrays

我有以下Javascript代码:

function checkIfValid(){
    var form = document.createuserform;
    var valid = new Array();

    for(i = 0; i < 4; i++){
    valid[i] = false;
    }

    if(form.fName.value == ""){
    form.getElementById('fNameStatus').innerHTML = "Please Enter Your First Name";
    valid[0] = false;
    }else{
    document.getElementById('fNameStatus').innerHTML = "";
    valid[0] = true;
    }

    if(form.lName.value == ""){
    valid[1] = false;
    }else{
    valid[1] = true;
    }

    if(!isValidEmail){
    valid[2] = false;   
    }else{
    valid[2] = true;
    }

    if(form.pass.value == ""){
    valid[3] = false;
    }else{
    valid[3] = true;
    }

    if(checkIfValid(valid)){
    form.submit();
    }
}

function checkIfValid(arr){
    for(i = 0; i < arr.length; i++){
    if(!arr[i]){
        return false;
    }
    }
    return true;
}

function isValidEmail(){
    var x=document.forms["createuserform"]["email"].value
    var atpos=x.indexOf("@");
    var dotpos=x.lastIndexOf(".");
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
    {
    return false;
    }
    return true;
}

运行后,我在firefox错误控制台中得到以下错误“arr is undefined line 46”。一个

3 个答案:

答案 0 :(得分:2)

看起来您可能正在尝试首先调用checkIfValid的无参数版本,其中使用单个参数调用相同函数的重载版本。

JavaScript没有函数重载。

无论何时调用checkIfValid,都会使用最后一个定义。

答案 1 :(得分:0)

你有函数checkIfValid(arr)和checkIfValid()。一个或另一个,不是两个。和其他人说的一样,javascript不支持function overloading

答案 2 :(得分:0)

正如其他人所说,你不能在javascript中使用不同参数的相同命名函数,并期望两者都有效。只有最后定义的一个是活动的。但是,您可以使用单个函数检查传递了哪些参数并相应地执行操作。因此,您可以使用以下单个函数替换两个函数:

function checkIfValid(arr){
    // if array passed, check it
    if (arr) {
        for(i = 0; i < arr.length; i++){
            if(!arr[i]){
                return false;
            }
        }
        return true;
    }

    // if no array passed, check our form
    var form = document.createuserform;
    var valid = new Array();

    for(i = 0; i < 4; i++){
    valid[i] = false;
    }

    if(form.fName.value == ""){
    form.getElementById('fNameStatus').innerHTML = "Please Enter Your First Name";
    valid[0] = false;
    }else{
    document.getElementById('fNameStatus').innerHTML = "";
    valid[0] = true;
    }

    if(form.lName.value == ""){
    valid[1] = false;
    }else{
    valid[1] = true;
    }

    if(!isValidEmail){
    valid[2] = false;   
    }else{
    valid[2] = true;
    }

    if(form.pass.value == ""){
    valid[3] = false;
    }else{
    valid[3] = true;
    }

    if(checkIfValid(valid)){
    form.submit();
    }
}

或者,如果您的第二个函数实际上只是一个辅助函数而不是第一个函数的重载版本,那么只需更改它的名称:

function checkIfValid(arr){
    // if no array passed, check our form
    var form = document.createuserform;
    var valid = new Array();

    for(i = 0; i < 4; i++){
    valid[i] = false;
    }

    if(form.fName.value == ""){
    form.getElementById('fNameStatus').innerHTML = "Please Enter Your First Name";
    valid[0] = false;
    }else{
    document.getElementById('fNameStatus').innerHTML = "";
    valid[0] = true;
    }

    if(form.lName.value == ""){
    valid[1] = false;
    }else{
    valid[1] = true;
    }

    if(!isValidEmail){
    valid[2] = false;   
    }else{
    valid[2] = true;
    }

    if(form.pass.value == ""){
    valid[3] = false;
    }else{
    valid[3] = true;
    }

    if(checkIfArrayValid(valid)){
    form.submit();
    }
}

function checkIfArrayValid(arr){
    for(i = 0; i < arr.length; i++){
        if(!arr[i]){
            return false;
        }    
    }
    return true;
}