动态添加验证规则

时间:2012-07-05 16:25:17

标签: jquery validation jquery-validate

我有一个插件,通常用于创建用于CRUD操作的jQuery对话框。添加到对话框中的表单的标记在插件代码的外部可用,插件只是要求http服务提供标记,并且在收到时只需将其添加到对话框本身。

然后我在插件(onSetupValidation函数)中创建了一个回调,它是插件用户自定义每个表单验证的句柄。这是我正在使用的代码的示例

var element = $('#mydiv');
element.crudplugin({
    [...]
    onSetupValidation: function(markup) {
        var form = $('#myForm', markup);
        var container = $('<div class="error"><p>Errors were found validating your form. Please correct them and retry.</p><ol></ol></div>')
                       .appendTo(form).hide();
        var validator = form.validate({
            errorContainer: container,
            errorLabelContainer: $('ol', container),
            errorElement: 'em',
            wrapper: 'li',
            highlight: function (element) {
                $(element).addClass("ui-state-error");
            },
            unhighlight: function (element) {
                $(element).removeClass("ui-state-error");
            },
            submitHandler: function (form) {
                [...]
            }
        });
    }
    [...]
});

好。我们来看问题

  1. 如果我在标记内添加验证规则(作为类属性),验证根本不起作用。如果我在validate()方法
  2. 中添加规则,则行为相同
  3. Google搜索我发现很多样本,尤其是SO上的样本,使用validation plugin.rules('add', rule)方法,如下例所示,所有这些链接都建议调用{{ 1}}方法之前添加任何规则,如下面的示例

    validate
  4. 但如果我在执行istruction时使用此方法,则会出现以下错误:

      

    SCRIPT5007:无法获取属性'settings'的值:object is   null或undefined jquery.validate.min.js,第15行,第257行

    有什么建议吗?

2 个答案:

答案 0 :(得分:4)

你肯定是在正确的轨道上。

关键是,在向表单中的各个字段添加规则之前,必须在表单上调用validate

如果您想查看触发此案例的示例,可以查看my answer to a previous question(或特别是jsfiddle)。在那个jsfiddle中,如果你注释掉javascript的最后4行($('#myForm').validate({/* ... */});),它将触发你看到的相同错误信息。

您的问题也不清楚,但您可能在表单可见之前调用validate吗?如果是这样,那很可能没有帮助......

答案 1 :(得分:0)

只是添加。如果你不介意使用丑陋的代码,你可以做这样的事情

var your_new_object = $("#theForm").validate().settings;
your_new_object ... //do some stuff with it
$("#theForm").validate().setting = your_new_object;

your_new_object是原始设置对象的更新版本

正如我所说,这是一种丑陋的方法,但如果没有其他方法可行,请试一试