2012-05-05 6 views
0

私は本当に何かに固執しているようです。私はすべてのフォームの入力フィールドがnullか同等かどうかをチェックする関数を持っていますが、これはすべてうまくいきますが、すべてのフィールドをjavascript配列にロードしてからforループを実行することによって、フィールドのどれかが空であるかどうかをチェックするifステートメントと一緒に、残念ながら、私はこれを動作させることができないと思っています。フォーム入力フィールドをjavascript配列に読み込んだ後に検証する

function checkform() 
{ 
    if(checkempty) 
    { 
    display_errormessage("One or more fields empty!"); 
    } 
    else 
    { 
    alert("Thanks for you input!"); 
    } 
} 

display_errormessage()関数は、単に表示するために、フォームの上部にあるdiv要素の中に、エラーメッセージを置くものです:私はその後、別の関数を使用し

function checkempty() 
{ 
    fname = document.getElementById("firstname").value; 
    lname = document.getElementById("lastname").value; 
    fage = document.getElementById("age").value; 
    addressl1 = document.getElementById("addressline1").value; 
    addressl2 = document.getElementById("addressline2").value; 
    ftown = document.getElementById("town").value; 
    fcounty = document.getElementById("county").value; 
    fpcode1 = document.getElementById("pcode1").value; 
    fpcode2 = document.getElementById("pcode2").value; 
    ftelephone = document.getElementById("telephone").value; 
    fcomment = document.getElementById("comment").value; 

    var myArray = []; 
    myArray[0] = fname; 
    myArray[1] = lname; 
    myArray[2] = fage; 
    myArray[3] = addressl1; 
    myArray[4] = addressl2; 
    myArray[5] = ftown; 
    myArray[6] = fcounty; 
    myArray[7] = fpcode1; 
    myArray[8] = fpcode2; 
    myArray[9] = ftelephone; 
    myArray[10] = fcomment; 

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

:ここに私のコードですフォームが不完全な場合はエラーメッセージが表示されます。

どこに間違っているのか誰にでも見られますか?

ありがとうございました!

デイブ。

+1

コードでは、ループ内の配列の最初の要素のみがチェックされます。私はif(!myArray [0])ではな​​くif(!myArray [i])と言うことを意味すると思いますか? – kinakuta

+0

ただコードを変更しましたが、すべてのフィールドに入力しても、感謝のメッセージを表示するのではなく、フィールドの1つがまだ空であることが主張されています。何か案は?? – GeordieDave1980

答えて

0

まず、機能checkformは呼び出されません。 if (checkform)if (checkform())である必要があります。そうしないと、テスト結果のテストではなく機能の可用性をテストします。

その後if (!myArray[0])if (!myArray[i])だけではなく、

以上、if (myArray[i].length==0)が明示的に空の文字列をテストしてくださいとだけ暗黙のブール変換を行っていないためにファーストネームをテストするべきである(Javascriptを評価0==""trueなど)

0

if(!myArray[0])は、if(!myArray[i])である必要がありますが、値がfalsey(null、 ''、0、falseなど)でないことを確認するだけで、タスクには適していません。

+0

私はなぜそれが正しく行っていないのか分かりません。私は配列をループして、フィールドのどれかが空であるかどうかを調べ、エラーメッセージが表示されない場合は、入力していただきありがとうございます。私はこれを試しました: if(myArray [i] == null || myArray [i] == "") { trueを返します。 } これはうまくいきませんでした:-( – GeordieDave1980

0

あなたは既にあなたのことを修正しているので、この機能は必要ないと思いますが、将来的に役立つかもしれないので、ここに残しておきます。 JSFiddle

function checkform() 
{ 
    arr1 = document.getElementsByTagName('input'); 
    arr1 = Array.prototype.slice.call(arr1); 
    arr2 = document.getElementsByTagName('textarea'); 
    arr2 = Array.prototype.slice.call(arr2); 
    arrs = arr1.concat(arr2); 

    for(i=0;i<arrs.length;i++) 
    { 
     if (arrs[i].type == "text" || arrs[i].type == "textarea") 
     { 
      if (arrs[i].value == '') 
      { 
       alert("Fill all fields before submitting!"); 
       return false; 
      } 
     } 
    } 
    alert("Thanks for your input!"); 
    return true; 
} 
+0

残念ながら、そのうちの1つはコメントを入力するためのテキストエリアです。もちろん入力の1つが送信ボタンです – GeordieDave1980

+0

完了しました!ありがとうございました。あなたが提案したコードを見て間違っていました。 – GeordieDave1980

+0

私は助けになることができてうれしいです:P私はまた、私の機能を改訂しました、それは入力テキストとテキストエリアのために意図されたように動作するはずです。 –

0

あなたinputフィールドはformという名前のフォームであることよる

var allTrue = [].every.call(document.forms.form.elements, function(el) { 
    return !!el.value; 
}); 
if (allTrue) { 
    alert("Thanks for your input!"); 
} 
else { 
    alert("Some fields are missing!"); 
} 
関連する問題