如何让KendoUI Validator忽略隐藏的表单元素?

时间:2013-07-25 06:06:02

标签: javascript validation kendo-ui hidden-field

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

我有以下问题:

  1. 为什么KendoUI Validator不会忽略隐藏的表单字段,以及如何将其删除?
  2. 为什么KendoUI将规则应用于每个输入字段,以及如何使其忽略某些字段。我想要一种声明性方法来实现这一点,而不是在我的验证规则中添加各种异常,如KendoUI Validator API页面中的示例所示。
  3. 如果没有规则被设置为输入元素中的属性(例如;必需),那么不应该进行验证吗?
  4. 我得到的行为:

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

    我正在使用以下kendo:

    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');
        }
    });
    

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

3 个答案:

答案 0 :(得分:3)

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

以下是回复: How do I get KendoUI Validator to ignore hidden form elements?

  

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

testRule2: function (input) {
    if (!input.is(":hidden")) {
        return $.trim(input.val()) !== "";
    }
    return true;
}

答案 1 :(得分: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

答案 2 :(得分:0)

validator._inputSelector=
  ":input:not(:button,[type=submit],[type=reset],[disabled],[readonly],[type=hidden],:hidden)
  [data-validate!=false]

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