1. ホーム
  2. javascript

[解決済み] e.preventDefault()を呼び出した後に、フォームを送信する。

2022-02-07 21:03:54

質問

簡単なフォームバリデーションを行っているのですが、非常に基本的な問題で行き詰ってしまいました。名前と料理(夕食の申し込み用)のフィールドが5組あります。ユーザーは1~5組を入力することができますが、名前が存在する場合はentreeを選択する必要があります。コード

http://jsfiddle.net/eecTN/1/

<form>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    <input type="submit" value="Submit">
</form>

// Prevent form submit if any entrees are missing
$('form').submit(function(e){

    e.preventDefault();

    // Cycle through each Attendee Name
    $('[name="atendeename[]"]', this).each(function(index, el){

        // If there is a value
        if ($(el).val()) {

            // Find adjacent entree input
            var entree = $(el).next('input');

            // If entree is empty, don't submit form
            if ( ! entree.val()) {
                alert('Please select an entree');
                entree.focus();
                return false;
            }
        }
    });

    $('form').unbind('submit').submit();

});

エラーメッセージは出ているのですが、毎回フォームを送信してしまいます。この行に何か問題があるのは分かっています。

$('form').unbind('submit').submit();

...でも、何をすればいいのかよくわからない。

どのように解決するのですか?

最も簡単な解決策は ではなく コール e.preventDefault() バリデーションが実際に失敗しない限り。この行を内側の if ステートメントで、関数の最後の行を削除してください。 .unbind().submit() .