2

我正在尝试将 KendoUI Validator 与 ASP.NET WebForms 项目一起使用。我有一个简单的页面,它有许多输入,当然 ASP.NET 也添加了一些隐藏的表单元素。

我有以下问题:

  1. 为什么 KendoUI Validator 不忽略隐藏的表单字段,以及如何获取它?
  2. 为什么 KendoUI 将规则应用于每个输入字段,以及如何让它忽略某些字段。我想要一种声明性的方式来做到这一点,而不是按照 KendoUI Validator API 页面中的示例在我的验证规则中添加各种异常。
  3. 如果没有规则被设置为输入元素中的属性(例如,必需),那么不应该是不应该应用验证吗?

我得到的行为:

  • 输入元素上根本没有验证特定属性,当我调用 .validate() 时仍然会应用验证规则
  • 验证隐藏的表单元素。

我正在使用以下剑道:

http://cdn.kendostatic.com/2013.2.716/js/jquery.min.js
http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js
http://cdn.kendostatic.com/2013.2.716/styles/kendo.common.min.css
http://cdn.kendostatic.com/2013.2.716/styles/kendo.default.min.css

我整理了一个小提琴来证明这一点:http: //jsfiddle.net/codeowl/B5ML4/3/

这是代码,对于那些无法使用小提琴的人:

我有以下标记:

<form action="/" id="testForm">
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

    <input type="text" id="testInput" value="">
    <a id="testValidate" href="javascript:;">Validate</a>
</form>

和以下脚本:

var validatable = $("#testForm").kendoValidator({
    rules: {
        testRule1: function (input) {
            // Only "Tom" will be a valid value for the FirstName input
            return input.is("[name=firstname]") && input.val() === "Tom";
        },
        testRule2: function (input) {
            return $.trim(input.val()) !== "";
        }
    },
    messages: {
        testRule1: "Your name must be Test",
        testRule2: "Your name must be Foo"
    }
}).data("kendoValidator");

$("#testValidate").click(function () {
    if (validatable.validate()) {
        alert('passed');
    }
});

当我按下验证链接时,它会显示隐藏字段的验证消息。

4

3 回答 3

3

对于任何有兴趣的人,我最终确实得到了对这个问题的回应。我不得不将它发布在 KendoUI 高级论坛上,以便有人回复。

以下是回复: 如何让 KendoUI Validator 忽略隐藏的表单元素?

实际上,隐藏的输入元素默认通过验证规则逻辑传递,因为有多个小部件具有隐藏的输入作为标记的一部分。但是,由于内置规则依赖于某些属性的存在,如果缺少,隐藏输入将不会发生验证。因此,您自己的自定义规则应该处理这种情况并跳过适当的元素。例如:

testRule2: function (input) {
    if (!input.is(":hidden")) {
        return $.trim(input.val()) !== "";
    }
    return true;
}
于 2013-08-07T06:33:42.883 回答
2

我是为新人写的。

只需禁用隐藏输入

$('#hidden_input').prop('disabled', true) // won't check in kendo or standard jquery validation

$('#hidden_input').prop('disabled', false) // will check in kendo or standard jquery validation
于 2017-06-21T09:06:17.600 回答
2
validator._inputSelector=
  ":input:not(:button,[type=submit],[type=reset],[disabled],[readonly],[type=hidden],:hidden)
  [data-validate!=false]

这不会验证隐藏的控件。剑道2018版

于 2019-06-11T06:53:04.357 回答