2011-07-27 15 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のエラーコンソールに次のエラーを取得する実行している時に「ARRは未定義ライン46です」。 An

+0

あなたは 'VAR有効=新しいアレイ()の移動約2つの同じ名前を持つ関数、そして何を持っている、あなたのコードの例では43行目の関数 –

+0

の外'ラインはfalse'のを返す 'です。 –

答えて

2

最初に引数のないバージョンのcheckIfValidを呼び出すと、同じ関数のオーバーロードされたバージョンが1つの引数で呼び出されているようです。

JavaScriptには関数のオーバーロードがありません。

最後の定義は、checkIfValidが呼び出されるたびに使用されます。

+0

申し訳ありません私は理解していない?私はどこにメソッドをオーバーロードしていますか?私はそれを一度だけ定義して一度だけ呼びます...私はちょうど有効な配列をcheckIfValid関数に渡したいと思います。 – user559142

+1

あなたの例の最初の関数は 'function checkIfValid()'です。あなたの例の2番目の関数は '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(); 
    } 
} 

それとも、あなたの第二の機能は、実際にはヘルパー関数ではなく最初の1のオーバーロードされたバージョンであることを意図している場合は、ちょうどだそれを変更します名前:

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