May*_*onn 7 jquery jquery-validate
如何验证<select>这是一个动态数组?像这样:
<select class="escolhaVidro id_material" name="id_material[]" id="id_material">
Run Code Online (Sandbox Code Playgroud)
澄清:这是<select>由PHP动态组装的,所以我不知道索引是什么,所以这种方式是不可能的:
$(this).validate({
rules: {
"id_material[index]" : {
required : true
}
}
});
Run Code Online (Sandbox Code Playgroud)
奇怪的是这个插件不起作用:
$(this).validate({
rules: {
id_material : {
required : true
}
}
});
Run Code Online (Sandbox Code Playgroud)
我还试图用一个CSS class required中<select>,但没有好.
Spa*_*rky 11
引用OP:"奇怪的是这个插件不起作用:
$(this).validate({ ... });"
这并不奇怪.它没有用,因为你没有真正针对任何事情.没有$(this)任何意义的背景或范围.
您必须正确定位<form>元素:
例如,id...
$('#myform').validate({ ... });
Run Code Online (Sandbox Code Playgroud)
...或任何其他有效的jQuery选择器,以<form></form>您要验证的实际为目标.
以下是如何验证select可以轻松适应您的情况的元素的一般示例:
重要的是,元素option中的第一个或默认值必须包含,否则规则将失败.如果出于某种原因,你可以不设置这个第一的等于,然后看到这个答案的自定义方法解决方法和的jsfiddle.selectvalue=""requiredoptionvalue""
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>
Run Code Online (Sandbox Code Playgroud)
由于您的name包含支架,[],你也必须用引号的字段名称:
jQuery:
$(document).ready(function () {
$('#myform').validate({ // initialize plugin within DOM ready
// other options,
rules: {
'id_material[]': {
required: true
}
},
});
});
Run Code Online (Sandbox Code Playgroud)
以上回答假设你知道name的的select元素.但是,如果你不知道name,你有几个选择......
1)class="required"在select元素内部 使用......
<select class="escolhaVidro id_material required" name="id_material[]" id="id_material">
Run Code Online (Sandbox Code Playgroud)
演示:http: //jsfiddle.net/Gy24q/4/
2) 如果规则更复杂,您可以使用该方法rules根据现有class分配添加复合.rules('add')
.each()如果您有多个select需要此规则的元素,请使用jQuery ...
// must be called after validate()
$('select.id_material').each(function () {
$(this).rules('add', {
required: true
});
});
Run Code Online (Sandbox Code Playgroud)
演示:http: //jsfiddle.net/Gy24q/10/
否则,这只会将规则应用于只有一个 select元素class id_material...
$('select.id_material').rules('add', {
required: true
});
Run Code Online (Sandbox Code Playgroud)
编辑:
在评论中引用OP:
在执行验证后的函数内部:
$('#formOrcamento').live('submit', function() {...});然后$(this).validate({...});引用:$('#formOrcamento').validate ({...});
与...一样:
$('#formOrcamento').live('submit', function() {
$(this).validate({ ... });
});
Run Code Online (Sandbox Code Playgroud)
是的,这正是它被打破的原因.
.validate()只有在DOM上调用一次才能初始化插件.你不应该把它放在一个submit处理程序中.Validate插件已经有了自己的内置事件处理程序,可以捕获表单的提交按钮.
根据我上面的工作jsFiddle演示设置你的代码.
编辑2:
在评论中引用OP:
我正在使用
jquery-ui,这增加了选择以下内容:style='display: none'.如果我通过Firebug删除display: none,则选择验证并正确显示标签错误.可能会发生什么?
默认情况下,Validate插件会忽略隐藏元素.你需要通过添加把这一选项关闭ignore: []到validate():
$(document).ready(function () {
$('#myform').validate({
ignore: [], // to allow validation of hidden elements
// other options,
});
});
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此答案.
| 归档时间: |
|
| 查看次数: |
33423 次 |
| 最近记录: |