我有一个插件,通常用于创建用于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) {
[...]
}
});
}
[...]
});
好。我们来看问题
validate()
方法 Google搜索我发现很多样本,尤其是SO上的样本,使用validation plugin的.rules('add', rule)
方法,如下例所示,所有这些链接都建议调用{{ 1}}方法之前添加任何规则,如下面的示例
validate
但如果我在执行istruction时使用此方法,则会出现以下错误:
SCRIPT5007:无法获取属性'settings'的值:object is null或undefined jquery.validate.min.js,第15行,第257行
有什么建议吗?
答案 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是原始设置对象的更新版本
正如我所说,这是一种丑陋的方法,但如果没有其他方法可行,请试一试