【问题标题】:jQuery validate only works oncejQuery 验证只工作一次
【发布时间】:2014-09-18 18:16:25
【问题描述】:

当我第二次尝试验证表单时,jQuery 验证不起作用。即使我点击任何文本框,我也会收到以下错误。

无法获取属性“设置”的值:对象为空或未定义

<form id="myForm" action="">

     <input type="text" id="input1" name="input1" />
     <input type="text" id="input2" name="input2" />

     <button id="submit" name="submit">   
     </button>

</form>

<script type="text/javascript">

    $('#myForm').validate({

        rules: {
            input1: "required",
            input2: "required",
            agree: "required"
        },

        submitHandler: function (form) {
            MyFunction(); // i somehow believe the problem could be here, i have added the code below
        }
    });

function MyFunction() {

    var firstname = $('#input1').val();
    var lastname = $('#input2').val();

    $.ajax({
        type: "POST",
        url: '@Url.Action("AddCustomer", "MyController")',
        data: "{'FirstName': '" + firstname + "','LastName': '" + lastname + "'}",
        dataType: 'text',
        success: function (msg) {

            $('#myDiv').html(msg);
        },
        error: function (result) {
            alert("Error");
        }
    });

}

</script>               

调用局部视图的主视图。

<div id="parentDiv">
    @Html.Action("ActionName", "ControllerName") //the action calls the Partial View
</div>

该功能运行良好。但是,有什么我需要添加的,以便第二次验证工作。

form 很简单,带有一些文本框和一个提交按钮。 form 位于局部视图中,如果这会有所不同的话。

如果我还需要添加 HTML 标记,请告诉我。虽然我认为这与AJAX 帖子有关。

【问题讨论】:

  • 只有让文本框为空才会出现这个错误?在您的数字化过程中,此验证是实时的?
  • 验证第一次按预期工作,但是一旦我单击提交按钮并通过 ajax 调用添加数据,然后即使我单击任何文本框,我也会收到此错误。
  • 是的,请显示 HTML 标记。您总是需要展示足够多的代码来重现该问题。
  • 您是否有理由将submitHandler 的代码放入外部函数中?把所有的代码都放到submitHandler里行吗?
  • 您为什么认为错误来自该行?控制台应该准确地告诉您哪条线路触发了错误。因为Unable to get value of the property 'settings' 对您显示的代码毫无意义。

标签: jquery ajax asp.net-mvc-4 jquery-validate


【解决方案1】:

由于您在ajax提交后没有重新加载页面,请尝试使用插件提供的resetForm方法。虽然,我希望这可以重复工作而无需重置表单。到目前为止,您向我们展示的内容也没有任何意义。

http://jqueryvalidation.org/Validator.resetForm/

ajax success 函数的末尾尝试这个...

$('#myForm').validate().resetForm();

编辑

使用您的代码,我无法重现您描述的问题:

http://jsfiddle.net/quyzu00h/3/

【讨论】:

  • 我必须尝试一下,您提供的链接中给出的内容不多。你能解释一下它的作用吗?
  • @user2322507,它会重置验证器对象,就好像页面是新加载的一样...删除任何错误消息等。但是,它不会清除您可能已经在字段中输入的任何值.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2014-06-20
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多