2011-07-27 51 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; 
}