0

MVC3 と目立たない検証を使用しています。2 つのフィールドが選択されている場合、フォームが不完全な場合でも、フォームを送信したい場合があります。私が使用しているJavaScriptは次のとおりです。

$('#form_section11').submit(function () {
        //event.preventDefault(); //stops form from submitting immediately 

        var validatorSection11 = $('#form_section11').validate();

        if (!$(this).valid()) {
            // or family name and date of birth
            var FamilyNameExists = true;
            var DateOfBirthExists = true;                

            if (validatorSection11.errorMap["FamilyName"]) { FamilyNameExists = false; }
            if (validatorSection11.errorMap["DateOfBirth"]) { DateOfBirthExists = false; }                

            // show the partial save rules
            $('#ParitalSaveIntructions').show();
            // show the partial save checkbox
            if (FamilyNameExists && DateOfBirthExists) {

                $("#AgreePartialSave").show();

                if ($("#PartialSave").is(':checked')) {
                    //  partial save has been requested
                    return true;    //// <- save not happening, INCORRECT action
                }
                // clear perinatalWomanView_PartialSave
                $("#PartialSave").removeAttr('checked');
            }
            return false;   // <- save not happening, correct action
        } 
        return true;    // <- save happens, correct action
    });

ユーザーには、送信が不完全であることを確認するためのチェックボックスが表示されます。JavaScript が機能する場所と失敗する場所を示しました。

私も追加しました

var validatorSection11 = $('#form_section11').validate(
            {
                onsubmit: false
            }
        );

これは効果がありません。私の質問は次のとおりです。

オリジナルreturn trueが機能しないのはなぜですか?onsubmit: falseを正しく使用していますか? これを行うより良い方法はありますか?

前もって感謝します。

4

1 に答える 1

1

save複数の return ステートメントの代わりに変数 ( ) を使用してみてください。

$('#form_section11').submit(function (e) {
    'use strict';
    var self = $(this),
        save = false,
        FamilyNameExists = true,
        DateOfBirthExists = true,
        validatorSection11 = self.validate();
    if (!self.valid()) {
        // or family name and date of birth
        FamilyNameExists = true;
        DateOfBirthExists = true;
        if (validatorSection11.errorMap["FamilyName"]) {
            FamilyNameExists = false;
        }
        if (validatorSection11.errorMap["DateOfBirth"]) {
            DateOfBirthExists = false;
        }
        // show the partial save rules
        $('#ParitalSaveIntructions').show(); // should this be "Parital" or "Partial"
        // show the partial save checkbox
        if (FamilyNameExists && DateOfBirthExists) {
            $("#AgreePartialSave").show();
            //if ($("#PartialSave").is(':checked')) { // Comment in answer
            //    // partial save has been requested
            //    save = true;
            //}
            save = $("#PartialSave").is(':checked');
            // clear perinatalWomanView_PartialSave
            $("#PartialSave").removeAttr('checked');
        }
        //save = false; //This was overriding the `save = true` above.
    }
    if (!save) {
        e.preventDefault(); // stops form from submitting immediately 
    }
    return save;
});

また、「回答のコメント」セクションでは、次のことが発生する必要があるため、このセクションはフォームが再送信された後にのみ実行される可能性があります。

  1. $("#AgreePartialSave").show();セクションを実行して表示する必要があります。
  2. を返すには、ユーザーがチェックインする必要があり$("#PartialSave")ます。$("#PartialSave").is(':checked')true
  3. ハンドラの$('#form_section11').submit()そのセクションを評価するには、 を再度起動する必要があります。

ユーザーが部分的な保存を行うためにクリックする必要がある別のボタンがある場合は、そのセクション全体をそのボタン ハンドラーに移動する必要があります。

于 2012-11-27T12:32:23.990 に答える