2011-07-27 116 views
0

我有以下的Javascript代码: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错误控制台下面的错误“改编未定义线46”。一个

+0

你有相同的名称有关移动'VAR有效=新的Array()两个函数,什么;'线的功能 –

+0

的43号线以外的代码示例'返回FALSE'。 –

回答

2

它看起来像你可能会试图首先调用checkIfValid的无参数版本,其中一个参数调用同一个函数的重载版本。

JavaScript没有函数重载。只要调用checkIfValid

最后的定义被使用。

+0

对不起,我不明白?我在哪里重载该方法?我把它定义只有一次,我曾经打电话......我只是想有效阵列传递到checkIfValid功能 – user559142

+1

在你的榜样第一个功能是'功能checkIfValid()';你的例子中的第二个函数是'function checkIfValid(arr)'。这些名字是相同的,这是一个错误。你的第一个函数永远不会被调用。 –

0

你具备的功能checkIfValid(ARR)和checkIfValid()。一个或另一个,不是两个。像其他人说,JavaScript不支持function overloading

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; 
}