jQuery验证 - form.valid()始终返回true

时间:2013-12-19 02:29:02

标签: jquery jquery-validate unobtrusive-validation

我有一种情况,当我尝试检查表单是否有效,但form.valid()始终返回true。但是,如果我尝试验证单个控件,则返回false。

这是我的表格:

<div class="profilestagsedit">
    @using (Html.BeginForm("", "", FormMethod.Post, new { id = "tagsform" }))
    {
        @Html.ValidationMessageFor(x => x.EditTagsText)
        @Html.TextBoxFor(p => p.EditTagsText, new
           {
               @id = "txtprofileedittags"
           })
    }
</div>

这是我的viewmodel:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter at least one Tag ")]
public string EditTagsText { get; set; }

这是jQuery代码:

   $('#tagsform').removeData("validator");
   $('#tagsform').removeData("unobtrusiveValidation");
   $.validator.unobtrusive.parse('#tagsform');
   $('#tagsform').validate();

点击保存按钮:

var isValid = $('#tagsform').validate().element($('#txtprofileedittags')); <-- false
$('#tagsform').valid() true <--

我想form.valid()也返回false,我做错了什么?

3 个答案:

答案 0 :(得分:7)

这个问题已经有了一个公认的答案,但我相信我找到了更具体的答案。我发现如果表单中的FIRST验证元素有一个'name'标记,那么一切都按预期工作(即。(如果表单无效,.valid()将返回false)。接受的答案很方便地包含一个“名称”标签,因此它起作用。

在普通形式中,您肯定需要名称标签,因为这是将数据提交到服务器时使用的名称标签。但是在更现代的环境中,例如那些使用Knockout的环境,没有理由拥有“名称”标签,因为数据绑定可以保持数据模型的更新。

答案 1 :(得分:3)

您应该在输入中添加必需的

<input type="text" name="name" required>

查看工作演示here

对于不显眼的HTML 5兼容属性,描述要附加到输入字段data-val="true"的验证器。

查看更多信息here

答案 2 :(得分:-1)

我正在引用这两个文件:

  • jquery.validate.js
  • jquery.validate.unobstrusive.js &lt; - 删除此引用!

删除对 jquery.validate.unobstrusive.js 的引用,为我修复了

希望这有助于某人