如果这是一个动态数组,如何验证<select>
?像这样:
<select class="escolhaVidro id_material" name="id_material[]" id="id_material">
澄清:这个<select>
由PHP动态组合,所以我不知道索引是什么,所以这种方式是不可能的:
$(this).validate({
rules: {
"id_material[index]" : {
required : true
}
}
});
奇怪的是这个插件不起作用:
$(this).validate({
rules: {
id_material : {
required : true
}
}
});
我还尝试在class
中使用CSS required
<select>
,但没有用。
答案 0 :(得分:11)
引用OP :“奇怪的是这个插件不起作用:
$(this).validate({ ... });
“
这并不奇怪。它没有用,因为你没有真正针对任何东西。 $(this)
没有任何意义的背景或范围。
您必须正确定位<form>
元素:
例如,id
...
$('#myform').validate({ ... });
...或any other valid jQuery selector定位您要验证的实际<form></form>
。
以下是如何验证您可以轻松适应您的情况的select
元素的一般示例:
<强> http://jsfiddle.net/Gy24q/ 强>
重要,option
元素中的第一个或默认select
必须包含value=""
或{{ 1}}规则将失败。如果出于某种原因,您无法将此required
的{{1}} option
设置为value
,那么see this answer's自定义方法解决方法和jsFiddle。
<强> HTML 强>:
""
由于您的<form id="myform">
<select name="id_material[]">
<option value="">please choose...</option>
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
</select>
....
</form>
包含括号,name
,you also must enclose your field name in quotes:
<强>的jQuery 强>:
[]
上面的答案假设您知道$(document).ready(function () {
$('#myform').validate({ // initialize plugin within DOM ready
// other options,
rules: {
'id_material[]': {
required: true
}
},
});
});
元素的name
。但是,如果你不知道select
,你有两个选择......
1)在name
元素中使用class="required"
...
select
演示:http://jsfiddle.net/Gy24q/4/
2)如果规则较为复杂,您可以使用the rules('add')
method根据现有<select class="escolhaVidro id_material required" name="id_material[]" id="id_material">
作业添加复合rules
。
如果您有多个需要此规则的class
元素,请使用jQuery .each()
...
select
演示:http://jsfiddle.net/Gy24q/10/
否则,这只会将规则应用于只有一个带有// must be called after validate()
$('select.id_material').each(function () {
$(this).rules('add', {
required: true
});
});
select
的 class
元素...
id_material
修改强>
在评论中引用OP:
执行验证后的函数内部:
$('select.id_material').rules('add', { required: true });
然后$('#formOrcamento').live('submit', function() {...});
指的是:$(this).validate({...});
同样如下:
$('#formOrcamento').validate
({...});
是的,这正是它被打破的原因。
.validate()
只能在DOM上调用一次,准备初始化插件。你不应该把它放在$('#formOrcamento').live('submit', function() {
$(this).validate({ ... });
});
处理程序中。 Validate插件已经有了自己的内置事件处理程序,可以捕获表单的提交按钮。
根据我上面的jsFiddle演示设置您的代码。
编辑2:
在评论中引用OP:
我正在使用
submit
,这会增加选择以下内容:jquery-ui
。如果我通过Firebug移除style='display: none'
, 然后选择验证并正确显示标签错误。 可能会发生什么?
默认情况下,Validate插件会忽略隐藏的元素。您需要通过将display: none
添加到ignore: []
来关闭该选项:
validate()
有关详细信息,请参阅this answer。
答案 1 :(得分:-1)
只需使用emtpy括号,并确保包含括号的名称带引号(请参阅documentation):
$(this).validate({
rules: {
"id_material[]" : {
required : true
}
}
});