1

このコードを使用してフォームを検証しています:

        if (isEmpty(email)) {
            alert("1");
            return false;
        }
        else if (!isEmail(email)) {
            alert("2");
            return false;
        }

        if (isEmpty(name)) {
            alert("3");
            return false;
        }

        if (isEmpty(age)) {
            alert("4");
            return false;
        }
        else if (!isAge(age)) {
            alert("5");
            return false;
        }

        if (isEmpty(city)) {
            alert("6");
            return false;

        }

        if (isEmpty(comments)) {
            alert("7");
            return false;
        }

「送信」ボタンを押すと、最初の2つの条件が機能するかどうか(電子メール変数が空であるか、電子メールアドレス形式ではないかを確認する条件)-電子メール入力を空のままにするか、電子メールアドレス形式ではないことを意味しますアラートが表示されます (1 または 2)。

問題は、残りの検証がスキップされ、別の入力を空のままにするかどうかは問題ではありません。

また、最初の IF ブロックを使用すると、次のようになります。

 if (isEmpty(email)) {
            alert("1");
            return false;
        }
        else if (!isEmail(email)) {
            alert("2");
            return false;
        }

それを検証ブロックの最後に移動すると、すべてが正常に機能します。

どこかで構文が間違っていると思いますが、2時間かけて探したのですが、見つかりませんでした。

PS

私が使用している2つの検証関数は次のとおりです。

function isEmpty(field) {
        if ((field == null || field == "")) {
            return true;
        }
        return false;
    }


function isEmail(field) {
        var atpos = field.indexOf("@");
        var dotpos = field.lastIndexOf(".");
        if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
            return false;
        }
    }
4

4 に答える 4

2

return ステートメントは関数を終了して、すべての検証を実行します

  1. if else if ブロックにすべての検証を保持し、毎回 return false を使用し続けます。また
  2. 条件が失敗するたびに変数を false に設定し、値を返します。j00lzが言ったように。
于 2013-07-21T08:20:29.583 に答える
2

x.lengthisEmail 関数で使用しますが、x定義されていません。

于 2013-07-21T08:51:04.460 に答える
1

これを次のように変更するとどうなりますか。

    if (isEmpty(email)) {
        alert("1");
        return false;
    }
    else if (!isEmail(email)) {
        alert("2");
        return false;
    }
    else if (isEmpty(name)) {
        alert("3");
        return false;
    }
    else if (isEmpty(age)) {
        alert("4");
        return false;
    }
    else if (!isAge(age)) {
        alert("5");
        return false;
    }
    else if (isEmpty(city)) {
        alert("6");
        return false;
    }
    else if (isEmpty(comments)) {
        alert("7");
        return false;
    }

検証プロセスを変更しないことを考えると、すべてを部分に分割するのではなく、すべてを 1 つの大きな if ステートメントにするとどうなるかについて、私はただ興味があります。

PS

あなたが気付いているかどうかはわかりませんが、あなたが設定した方法では、最初の if ステートメントの 1 つが false に戻ると、その if ステートメントで false を返すと、作業中のメソッド全体が終了します。つまり、他の部分は実行されません。したがって、空の入力ごとにアラートを表示するなどの目的で撮影している場合、このようにはなりません。

于 2013-07-21T08:22:40.003 に答える
1

return false; 

関数を終了し、実行中の残りのコードを停止します。

代わりに変数を設定します。

result="false";

そして関数の最後に追加します

return result;
于 2013-07-21T08:17:47.763 に答える