0

ユーザーがフォーム全体を完了していない場合に警告メッセージを表示したいのですが、期待どおりに機能していないようです。jQuery .each メソッドは、最初の入力フィールドからのみデータを収集します。最初のフィールドを空のままにしておくと正しく機能しますが、最初のフィールドのみを入力して他のフィールドを空のままにすると、成功と表示されますが、これは間違っています。

// send message on click
$("#submit").click(function() {

    // store values
    var data = $("#form").serialize();

    $(":input, textarea").each(function() {

        // if empty show warning
        if ( $(this).val() === "" ) {
            $(".message-fail").fadeIn(500);
        }

        // if not empty send message
        else if ( !$(this).val() ) {
                $.ajax({
                    type: "POST",
                    url: "mail.php",
                    data: data,
                    success: function() {
                        $(".message-sent").fadeIn(500);
                    }
                });
        }

    });

});
4

3 に答える 3

1

次のプロセスを実行できます。

しかし、すべての分野で AJAX は必要ないと思います

if ($.trim(this.value).length) { // if value exists
    $(".message-fail").fadeIn(500);
} else { // if no value exists, here no need to elseif
    $.ajax({
        type: "POST",
        url: "mail.php",
        data: data,
        success: function() {
            $(".message-sent").fadeIn(500);
        }
    });
}

説明:

$.trim(this.value)-> 値が存在するかどうかを確認します

または使用することもできます(最初の方が優れています)

$.trim($(this).val()).length-> 値が存在するかどうかを確認します

于 2012-05-28T13:43:31.560 に答える
0

この行else if ( !$(this).val() )には間違った状態があります。つまり!$(this).val()、正しく動作するようにしてください....

于 2012-05-28T13:44:00.617 に答える
0

最初の有効な入力がフォームを投稿するため、「else」を「each」の外側に配置する必要があります:)フラグ変数を作成し、各内でチェックを行います...しかし、単純なループを使用する方が良いです。チェックが完了したら、フラグの別のチェックを行い、問題がなければ投稿します

于 2012-05-28T13:48:04.627 に答える