1

以下を使用してフォームをリセットした後、問題が発生しました。

$(".cancel").click(function () {
        validator.resetForm();
        $(':input', '#MyForm')
            .not(':button, :submit, :reset, :hidden')
            .val('')
            .removeAttr('checked')
            .removeAttr('selected');
        //OR
        document.getElementById('MyForm').reset();
});

もう一度保存すると、必須フィールドが不要になり、フォームがポストバックされます。リセット後もフォームを再検証するにはどうすればよいですか?

検証とフォームをリセットするだけなので、これは単純な例ですが、他のページでは特定のフィールドを手動で操作する必要があるため、フォームをリセットするにはこの方法が必要です。

違いがある場合、これはMVCで作成されたフォームです

助言がありますか?

EDIT:いくつかの試行錯誤の後、問題は直接のresetFormコードではなく、他の何かにあるようです。

コンソールに次の JavaScript エラーが表示されます。

SyntaxError: invalid label

そして警告

Use of attributes' specified attribute is deprecated. It always returns true.

それらが私の問題に関連しているかどうかはわかりませんが、この時点で他に何をすべきかわかりません.

私が使用しているスクリプトに関する限り:

@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/Scripts/jquery-1.8.3.min.js")
@*@Scripts.Render("~/Scripts/jquery-1.9.1.min.js")*@
@Scripts.Render("~/Scripts/jquery-ui-1.9.2.js")
@Scripts.Render("~/Scripts/jquery.validate.js")
@Scripts.Render("~/Scripts/jquery-validate-messages.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js")
@Scripts.Render("~/Scripts/jquery.jeditable.mini.js")
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.editable.js")
@Scripts.Render("~/Scripts/DataTables-1.9.4/extras/TableTools/media/js/TableTools.js")
@Scripts.Render("~/Scripts/Countdown.js")
@Styles.Render("~/Scripts/DataTables-1.9.4/media/css/jquery.dataTables.css")
@RenderSection("scripts", required: false)

1.9.1 は、最初の JQuery 呼び出しで壊れていたため、コメント アウトされました。これは関連していますか?

4

4 に答える 4

1

送信時に強制的に再検証する方法を見つけました:

$(".cancel").click(function () {
        $('#FormId')[0].reset();
        validator.resetForm();
    });

    $("#submitForm").click(function () {
        if ($("#FormId").valid()) {
            $("#FormId").submit();
        }
    });

今では、フォームの送信機能に依存して検証をトリガーするのではなく、自分でトリガーしています。

于 2013-03-13T13:47:45.020 に答える
1

以下を使用して、検証を再度設定してみてください。

$j.validator.unobtrusive.parse('#MyForm');

編集

リセットボタンでフォームをリセットしてみてください。これをフォーム内に配置してください:

<button class="reset-button" type="reset">Reset form</button>

でイベントハンドラを無効にします.cancel。または、次のように変更します。

$('.cancel').click(function () {
    $('.reset-button').click();
});

表示したくない場合は、リセットボタンを非表示にします。

于 2013-03-12T14:29:21.593 に答える
0

なぜそのようにフォームをリセットしたのかわかりませんが、リセットするだけで問題なく動作します。Jqueryにはネイティブリセットがあります

    $(".cancel").click(function () {
        $('#FormId')[0].reset();
     });

検証により作業がスムーズになります

于 2013-03-12T14:36:10.387 に答える
0

次のことを試してください。

var validator = $("#FormId").validate();

$(".cancel").click(function () {
    $('#FormId')[0].reset();
    validator.resetForm();
});

フィドルの

于 2013-03-12T14:38:07.253 に答える