Javascript 如何让KendoUI验证程序忽略隐藏的表单元素?

Javascript 如何让KendoUI验证程序忽略隐藏的表单元素?,javascript,validation,kendo-ui,hidden-field,Javascript,Validation,Kendo Ui,Hidden Field,我正在尝试将KendoUI验证程序用于ASP.NET WebForms项目。 我有一个简单的页面,有许多输入,当然ASP.NET也添加了一些隐藏的表单元素 我有以下问题: 为什么KendoUI验证器不忽略隐藏的表单字段,以及如何使其生效 为什么KendoUI将规则应用于每个输入字段,以及如何使其忽略某些字段。我想要一种声明式的方法来实现这一点,而不是像KendoUI Validator API页面中的示例那样,在我的验证规则中添加各种异常 如果在输入元素中没有设置任何规则作为属性(例如:必需),

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

我有以下问题:

  • 为什么KendoUI验证器不忽略隐藏的表单字段,以及如何使其生效
  • 为什么KendoUI将规则应用于每个输入字段,以及如何使其忽略某些字段。我想要一种声明式的方法来实现这一点,而不是像KendoUI Validator API页面中的示例那样,在我的验证规则中添加各种异常
  • 如果在输入元素中没有设置任何规则作为属性(例如:必需),那么不应该应用任何验证吗
  • 我得到的行为:

    • 由于输入元素上根本没有特定于验证的属性,因此在调用.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
    
    我制作了一把小提琴来证明这一点:

    以下是代码,适用于那些无法访问fiddle的用户:

    我有以下标记:

    <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>
    

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

    对于任何感兴趣的人,我最终得到了对这个问题的回答。我不得不把它贴在KendoUI高级论坛上,让别人回复

    以下是答复:

    实际上,隐藏的输入元素是通过验证传递的 由于存在多个小部件,因此默认情况下规则逻辑 其中有一个隐藏的输入作为标记的一部分。但是, 如果存在某些属性,则内置规则依赖于这些属性的存在 如果丢失,则不会对隐藏的输入进行验证。所以,, 您自己的自定义规则应处理此场景,并跳过 适当的要素。例如:


    我是为新来的人写的

    只需禁用隐藏输入即可


    这将不会验证隐藏的控件。Kendo 2018版本

    如果您在输入标记中有消息的范围和所需的validationMessage属性,那么这是否有效?规则似乎只适用于除具有这些设置的输入之外的其他输入…我通过向我想要使用自定义规则的元素添加属性来实现解决方案,并为其指定规则名称的值,然后在规则中为该值检查该值。如;您应该提供答案的相关部分以及链接。
    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');
        }
    });
    
    testRule2: function (input) {
        if (!input.is(":hidden")) {
            return $.trim(input.val()) !== "";
        }
        return true;
    }
    
    $('#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
    
    validator._inputSelector=
      ":input:not(:button,[type=submit],[type=reset],[disabled],[readonly],[type=hidden],:hidden)
      [data-validate!=false]