0

初めての Web サイトを開発していますが、javascript 検証スクリプトに問題があります。私のコード:

<html>
    <head>
      <title>Territory</title>
    </head>
    <body>

      <script type="text/javascript"> //Main Javascript function giving me issues
    function validate(form)
    {
      fail = validateTerrNum(document.checkOut.numberOut.value);
      fail += validateFirstName(document.checkOut.fName.value);
      fail += validateLastName(document.checkOut.lName.value);
      if (fail == "") 
    return true;
      else 
      {
        alert(fail);
        return false;
      }
    }
        </script>
        <script type="text/javascript>
        function validateTerrNumber(field)
        {
     if (field == "") return "No territory number was entered. \n";
     else if (field.length > 3)
    return "Territory numbers must be less than four characters. \n";
    else if (/[^0-9]/.test(field))
        return "Only 0-9 allowed in territory number. \n";
    return "";
        }

        //Note: Does not sanitize string
        function validateFirstName(field)
        {
     if (field == "") return "No first name was entered. \n";
     return "";
        }

        //Again, note that this function does not sanitize string
        function validateLastName(field)
        {
     if (field == "") return "Not last name was entered. \n";
     return "";
        }
        </script>

        <table border="0" cellpadding="2" cellspacing="5">
     <th colspan="2" align="center">Check Out</th>
      <form name="checkOut" method="post" onSubmit="validate(this)"> 
    <tr><td>Territory Number</td><td><input type="text" name="numberOut"     tabindex="1" maxlength="3" size="3" /></td>
                    </tr><tr><td>First Name of Holder</td><td><input type="text" name="fName" tabindex="2" maxlength="15"/></td>
                    </tr><tr><td>Last Name of Holder</td><td><input type="text" name="lName" tabindex="3" maxlength="15" /></td>
                    </tr><tr><td><input type ="checkbox" name="specialC" tabindex="4" value="Yes"/> Special Campaign</td>
                    </tr><tr><td></td><td><input type="submit" value="Check Out" /></td>
                </form>
            </table>
</body>
</html>

明らかにフォーマットが不十分です - コピーと貼り付けの結果です。より具体的には、この問題は JavaScript の検証に関するものです。「チェックアウト」を押すと、間違った値を入力しても検証が妨げられません。スクリプトは非常に単純ですが、何らかの理由で何が起こっているのかわかりません (私は JavaScript にかなり慣れていません)。

ブラウザー全体で多くの JavaScript が実行されているため、問題はブラウザーではないことはわかっています。私が考えることができる唯一のことは、フォームにメソッドがないことです。これは別の検証になりますが、php で記述されています。JavaScript は実際には、クライアントの事前検証にすぎません。

どんな助けでも大歓迎です。

-マグマ

4

2 に答える 2

1

検証が失敗した後に送信を停止するには、次のものが必要です。

onSubmit="return validate(this)"

現在のコードの代わりに:

onSubmit="validate(this)"

validate()関数は既にtrueまたはfalseを返しますが、これらの値はイベント ハンドラー自体から返されませんでした。の引用符の間のコードを関数の本体と考えると、onSubmit=""これは理にかなっています。

そして、Teemu が指摘したように、あなたの関数は、実際にその関数を として宣言したときにvalidate()呼び出される関数を呼び出そうとします。validateTerrNumvalidateTerrNumber

これらの問題を修正すると、ここで動作することがわかります: http://jsfiddle.net/nnnnnn/Wvcy3/

于 2012-08-15T05:30:41.070 に答える
0

に次の行がありvalidate()ます。

fail = validateTerrNum(document.checkOut.numberOut.value);

そして、この機能があります:

function validateTerrNumber(field){...

また、要素 (ブラウザ依存???) ではなく、代わりに使用することをお勧めしますdocument.checkOut(undefinedとも同様) 。もちろん、これらを HTMLに追加する必要があります。formdocument.getElementById('numberOut').valuefNamelNameid

于 2012-08-15T05:30:16.107 に答える