0

私は本当に何かに固執しているようです。すべてのフォーム入力フィールドがnullまたは""に等しいかどうかをチェックする関数があります。これはすべて問題ありませんが、すべてのフィールドをjavascript配列にロードしてから、forループを実行することで別の方法があるかどうかを確認したいと思いました。いずれかのフィールドが空であるかどうかを確認するifステートメントとともに、残念ながら、これを機能させることができないようで、どこかで何かを見逃しただけなのかどうか疑問に思っています。これが私のコードです:

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

次に、別の関数を使用します。

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

display_errormessage()関数は、フォームが不完全な場合にエラーメッセージを表示するために、フォームの上部にあるdivにエラーメッセージを配置する関数にすぎません。

誰かが私がどこで間違っているのか見ることができますか?

助けてくれてありがとう!

デイブ。

4

4 に答える 4

0

まず、関数checkformは呼び出されません。テストするif (checkform)必要があるif (checkform())か、テストするのは関数の可用性のみをテストし、結果はテストしません。

次に、名をテストするだけではありませif (!myArray[0])if (!myArray[i])

またはif (myArray[i].length==0)、暗黙のブール変換を行うだけでなく、空の文字列を明示的にテストするようにすることをお勧めします(javascriptは次のように評価さ0==""れますtrue

于 2012-05-05T10:26:07.293 に答える
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;
}
于 2012-05-05T04:41:50.153 に答える
0

if(!myArray[0])である必要がありますif(!myArray[i])が、より大きなポイントは、値がfalseではないこと(null、''、0、falseなど)を検証しているだけであり、タスクに適切であるということではありません。

于 2012-05-05T04:35:54.507 に答える
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!" );
}
于 2012-05-05T05:29:09.987 に答える