我能够使用 jquery-validate 验证多选,并创建了一个小提琴作为演示。按住 Ctrl 取消选择选择,然后单击选择以查看效果。
<form id="myform">
<select id="id_deals-1-sales_item" class="multi_select_mandatory" name="deals-1-sales_item" multiple="multiple">
<option value="1">Hotel 3 Star</option>
<option selected="selected" value="2">Hotel 4 Star</option>
</select>
</form>
$(document).ready(function() {
var validator = $('#myform').validate({
// options
rules: {
"deals-1-sales_item": "required",
},
//ignore: ':hidden:not("#id_deals-1-sales_item")'
});
});
但是一旦我选择了多选,它就会停止工作:见fiddle。
$('#id_deals-1-sales_item').chosen();
在研究时,我发现有人尝试过这个而jquery multiselect
不是选择。jquery validate 中似乎忽略了隐藏元素。我尝试应用该解决方案,但由于选择有不同的方法,我被卡住了(选择中不存在多选)
这里有任何 jQuery 大师可以为我指明正确的方向吗?此外,我宁愿基于类而不是基于字段名称的解决方案。像这样:
这是我中途想出的解决方案。但不知道如何进行???
。
$.validator.addMethod("needsSelection", function(value, element) {
return $(element).???.length > 0;
});
var validator = $('#myform').validate({
});
$('#myform').find('select.multi_select_mandatory').each(function(){
$(this).change(function(){
$(this).valid();
});
$(this).rules('add', {
needsSelection: ""
});
});
解决方案:
使用下面的 eicto 解决方案,我能够创建基于类而不是基于字段名称的解决方案。当您有想要立即验证而不向服务器提交任何内容的动态元素时,这特别有用。
var validator = $('#deal_modal_form').validate({
// options
ignore: ':hidden:not(.chzn-done)'
});
$('#myform').find('select.multi_select_mandatory').each(function(){
$(this).chosen().change(function(){
$(this).valid();
});
$(this).rules('add', {
required: true,
});
});