【发布时间】:2013-09-12 01:29:15
【问题描述】:
我有一个用于创建产品记录的表单,它具有(用户控制的)动态条目(即一个产品可以有 N 个选项(例如不同的颜色,或不同的饰面等,也可能有不同的价格)。用户添加了一个根据需要为每个选项设置一组字段。当然,大多数产品只有一个版本(因此只有一个选项),所以在这种情况下,不需要提供选项名称,只需提供价格。所以选项名称字段是仅当表单上有多个期权价格字段时才有效。
$('.iprice').each(function() {
$(this).rules('add', {
required: true,
number: true,
*/ messages : { required:'enter price', number:'enter only price' } */
});
});
$('.iname').each(function() {
$(this).rules('add', {
required: function(){
if ($('[name="attr[2][price]"]').length) {
return true;
} else {
return false;
}
},
/* messages: function(){
if ($('[name="attr[2][price]"]').length) {
return 'option name?';
}
} */
});
});
验证工作正常,如上所述。 (见jsfiddle here)。但是,您会注意到验证中有两个注释掉的部分提供自定义消息。如果包含这些,一旦任何一个引用字段中有值,提交按钮将返回错误。
"{"error": "Shell 表单不验证{'html_initial_name': u'initial-js_lib', ..."
据我所知,语法是正确的,方法是正确的。谁能看到我哪里出错了?
(我意识到我可以通过为每个元素创建 data-msg-required="??xx??" 属性来以其他方式解决问题,但这有点不雅和冗长。)
有什么想法吗?
Here is another jsfiddle 显示只有一组选项的表单。 price 字段的自定义消息已启用,但是,如果 name 字段的自定义消息未注释,则验证将在提交时崩溃。
【问题讨论】:
-
为什么不试试 1.11.1 版本而不是 1.11.0pre?我还认为您需要删除该
.on('submit')处理程序。如果您已经在插件中内置了submitHandler,则不需要它。 -
@Sparky,你对版本的观察是正确的!通过使用 1.11.1 版本,提交错误已得到解决。第一个实例(使用 iprice 类)也解决了自定义消息的问题。但是对于条件 (.iname) 类,它们只是被忽略了。但是我意识到我可以简单地为“必需”设置一条消息,并且由于 required 是有条件的,该消息也是如此。 [链接]jsfiddle.net/e4effect/PbXJf
标签: jquery forms jquery-validate