2

これにはかなり簡単な修正が必要です...

空のフィールドを検証したい登録フォームがあり、必要に応じて JavaScript が単純なポップアップ アラートを返すようにします。スクリプトコードは次のとおりです。

<script type="text/javascript">
    function validateForm() {
        var a = document.forms["registration_form"]["school"].value;
        var b = document.forms["registration_form"]["name"].value;
        var c = document.forms["registration_form"]["password"].value;
        var d = document.forms["registration_form"]["field"].value;
        var e = document.forms["registration_form"]["field_location"].value;
        var f = document.forms["registration_form"]["volleyball_campus"].value;
        var g = document.forms["registration_form"]["volleyball_location"].value;
        var h = document.forms["registration_form"]["indoor"].value;
        var i = document.forms["registration_form"]["outdoor_courts"].value;
        var j = document.forms["registration_form"]["blackout"].value;
        var k = document.forms["registration_form"]["blackout_dates"].value;
        if (a == "" || b == "") {
            alert("Please make sure to enter your name and school.");
            return false;
        } else if (c != "pal") {
            alert("Sorry, your password is invalid.");
            return false;
        } else if (d == "no" && e == "") {
            alert("Please make sure to enter where you will play football.");
            return false;
        } else if (f == "no" && g == "") {
            alert("Please make sure to enter where you will play volleyball.");
            return false;
        } else if (h == "no" && i == "0") {
            alert("Please make sure to select how many outdoor volleyball courts you will use.");
            return false;
        } else if (j == "yes" && k == "") {
            alert("Please make sure to enter your blackout dates.");
            return false;
        }
    }
</script>

変数 a、b、c についてはすべて正常に機能します。ただし、変数 d && e で始まる else if 条件は実行されないようです。言い回しに何か問題があるに違いないと思いますが、それが何であるかわかりません。

まったく同じことを行うようにサーバー側の php スクリプトをセットアップしましたが、問題なく動作します。ここで見ることができます:

//Validate the form:
if ($_POST['school'] == "" || $_POST['name'] == "") {
    echo "Please make sure to enter your name and school.";
} elseif ($_POST['password'] != "pal") {
    echo "Sorry, your password is invalid.";
} elseif ($_POST['field'] == "no" && $_POST['field_location'] == "") {
    echo "Please make sure to enter where you will play football.";
} elseif ($_POST['volleyball_campus'] == "no" && $_POST['volleyball_location'] == "") {
    echo "Please make sure to enter where you will play volleyball.";
} elseif ($_POST['indoor'] == "no" && $_POST['outdoor_courts'] == "0") {
    echo "Please make sure to select how many outdoor volleyball courts you will use.";
} elseif ($_POST['blackout'] == "yes" && $_POST['blackout_dates'] == "") {
    echo "Please make sure to enter your blackout dates.";
} else {

これは意図したとおりにすべてをキャッチしますが、クライアント側の Javascript 検証 (よりユーザーフレンドリーな外観のためだけに最初に実行します) は、最初の 3 つの変数を超えて機能しないようです。

私は一生、理由を理解することはできません。私はインターネット上で検索しましたが、探している答えを見つけることができません。どんな助けでも大歓迎です!

PS ページ自体はhttp://www.712jefferson.org/pal/registration.htmlにあります。意図したプロセスを明確にするのに役立ちます。

4

3 に答える 3

2

アラートdは、等しい場合のみ表示され、空のままです。とについても同様です。これは意味がありません。次の例を見てください。noefg

I play volleyballbut not play at the campas so I enter noin . あなたのロジックでは、ユーザーにバレーボールの場所を入力してもらいたい場所にf空の文字列を挿入する必要があります。g

これは次のように変更する必要があります。

else if (f == "no" && g != "") {

}  

==から!=thisへの変更gは、 が空の文字列と等しくないことに注意してください。d同じことがandにも当てはまります( が"no" に設定されている場合は、空にeなりたくありません)。ed

また、クライアント側でパスワードを検証するのは危険です。サーバー側で検証することを願っています。

于 2013-08-16T18:48:04.617 に答える
0

後続の条件が評価されていない場合は、おそらく、前の条件の 1 つが評価され、既に満たされ、返されたことが原因です。すべての条件が評価されていることを確認したい場合は、return ステートメントを削除し、条件の true/false 状態を出力する各条件に console.log() メッセージを追加できます。

于 2013-08-16T18:52:49.613 に答える