【问题标题】:Dynamically add validation rules动态添加验证规则
【发布时间】:2012-07-05 16:25:17
【问题描述】:

我有一个插件,它通常处理用于 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. 谷歌搜索我发现了很多示例,特别是在 SO 上,它们使用 validation plugin.rules('add', rule) 方法,如下例所示,所有这些链接都建议在添加任何规则之前调用 validate 方法,例如在下面的示例中

    $("#myField", markup).rules("add", { required: true });
    

但是,如果我在执行指令时使用此方法,则会收到以下错误:

SCRIPT5007:无法获取属性“设置”的值:对象是 null 或未定义 jquery.validate.min.js,第 15 行字符 257

有什么建议吗?

【问题讨论】:

    标签: jquery jquery-validate


    【解决方案1】:

    您绝对是在正确的轨道上。

    关键是您必须先在表单上调用validate,然后才能将规则添加到表单中的各个字段。

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

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

    【讨论】:

    • 感谢您的回答。在对话框创建期间和显示表单之前调用回调。在回调中,我首先调用 validate() 然后添加规则。我会尝试在 show() 方法之后移动回调...
    • 肯定会这样做 - 如果这是一个 jQuery 对话框,open 事件将是一个合适的位置。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2018-01-12
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多