1

我使用以下方法重置表单后遇到问题:

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

当我再次点击保存时,不再需要必填字段并且表单会发回。即使在重置后,如何让表单重新验证?

这是一个简单的例子,因为我只是重置验证和表单,但在其他页面上我必须手动操作某些字段,所以我需要这种重置表单的方式才能工作。

这是一个 MVC 创建的表单,如果这有什么不同的话

有什么建议么?

编辑:经过反复试验,问题似乎不应该出在直接的 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

尝试使用以下方法再次设置验证:

$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 回答
1

找到了一种强制它在提交时重新验证的方法:

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

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

现在我不再依赖表单的提交功能来触发验证,而是我自己来触发它。

于 2013-03-13T13:47:45.020 回答
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 回答