【问题标题】:jQuery Validation - form.valid() always returning truejQuery 验证 - form.valid() 总是返回 true
【发布时间】:2013-12-19 02:29:02
【问题描述】:

当我尝试检查表单是否有效时,我遇到了一种情况,但 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>

这是我的视图模型:

[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,我做错了什么?

【问题讨论】:

  • 也许你应该在输入中添加“必需”

标签: jquery jquery-validate unobtrusive-validation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您应该在输入中添加 required

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

    查看工作演示here

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

    查看更多信息here

    【讨论】:

    • 这实际上是错误的, required 属性是 jquery 验证的一部分,而不是不显眼的验证,如果需要,服务器端框架应该为您处理这个问题。当我运行给定的示例时,它不起作用。你很幸运,其中 1 依赖于另一个,在这种情况下恰好解决了这个人的问题。
    • 我没有说必需的属性是不显眼的验证的一部分。我只是说“对于不显眼的 HTML 5 兼容属性,描述了要附加到输入字段 data-val='true' 的验证器。演示无法正常工作,因为 jquery 验证源文件位置不再存在。本来可以使用控制台进行检查。我会检查是否有可用的验证 CDN 任何方式感谢您的回复。
    • 已更改验证 CDN。请立即查看演示。
    • 这只是以不同的方式验证同一件事。它不能通过不显眼的验证来解决报告的问题。更多信息链接很有趣,但是是一篇很长的博文,我看不出它是如何支持这个答案的。
    【解决方案3】:

    我引用了这两个文件:

    • jquery.validate.js
    • jquery.validate.unobtrusive.js

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

    希望这对某人有帮助

    【讨论】:

    • 请务必仔细阅读问题。这里发生的问题不会是由额外的脚本引用引起的。正如我在您的副本中指出的那样,这些脚本并不冲突。事实上,一个需要另一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多