【问题标题】:MVC + Jquery Validator doesn't work on disabled fields even if elements are included即使包含元素,MVC + Jquery Validator 也不适用于禁用的字段
【发布时间】:2014-11-20 13:56:49
【问题描述】:

如果我对旧论点提出新问题,但我找不到任何有效的解决方案,请原谅我。 我有一个表单,其中的某些字段可能会被禁用,但它们必须经过验证(由于不允许用户填写而被禁用)。

由于原始 Javascript 验证器不包括提交/重置/图像/禁用,我决定修改此文件以验证禁用的字段。

传递的代码:

.not(":submit, :reset, :image, [disabled]")

到:

.not(":submit, :reset, :image")

但我的禁用字段仍然被忽略。 我尝试了该主题的各种变体,但问题仍然存在。

感谢您的任何新提示!

【问题讨论】:

  • 这毫无意义。禁用的控件不会回发,所以在客户端上验证它们有什么意义。如果可以,并且属性无效,表单将不会因为验证错误而提交,但用户无法更正错误,因为它已被禁用,因此您的应用程序只会冻结!

标签: javascript jquery asp.net-mvc validation


【解决方案1】:

我想我找到了伟大而优雅的解决方案 - 只需使用 html 属性 readonly 并且一切都按您的预期工作。

<input type="text" readonly="readonly" />

问题在于表单没有提交禁用的字段,因此可能没有经过验证。 W3C HTML4 Spec

其他解决方案,在这个question找到

var val;
$("#clientConfigurationForm").on("change", "input[type=checkbox]", function () {
    val.resetForm();
    $(this)
        .closest("div")
        .find("input, select")
        .not(this)
        .not(":submit")
        .prop("disabled", !$(this).prop("checked"))
        .not(":disabled")  
        .each(function () {
          $(this).valid();
        });
});

val = $("#clientConfigurationForm").validate({

    onkeyup: function (element) {
        $(element).valid();
    },
    focusInvalid: false,
    submitHandler: function (form) {
        alert("submitted");
    }
});

【讨论】:

  • 无事可做。尝试了主题的变体,但它仍然继续阻止对禁用字段的验证。奇怪的是,直接修改 Jquery.Validate.js 无论如何都会阻止禁用的字段! :S
  • 当我深入研究时,我找到了答案,为什么会这样。我在顶部更新了我的答案,希望这能解决您的问题。
  • 是的,看来问题不在于验证器,而在于表单......我尝试了“只读”的解决方案。对于文本框是可以的,选择有点棘手,最后它不是我想要的(从图形上讲)。我使用了一种解决方法,在模型中添加了几个属性,只是为了验证作为图形属性的支持。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2018-05-28
相关资源
最近更新 更多