Select23.5.2とjqueryvalidation 1.13.1を使用しています。検証プラグインの「highlight」メソッドを使用してselect2要素にエラークラスを追加できますが、値を選択すると、そのエラークラスを削除できません。どうすればこれを解決できますか?
[〜#〜] html [〜#〜]
<form id="test" class="frm">
<div>
<input type="text" name="name" />
</div>
<div>
<label for="singleselect"></label>
<select class="sl" id="singleselect" name="singleselect">
<option></option>
<option value="val1">Val-1</option>
<option value="val2">Val-2</option>
</select>
</div>
<div>
<label for="multipleselect"></label>
<select class="sl" id="multipleselect" name="multipleselect" multiple="multiple">
<option></option>
<option value="val1">Val-1</option>
<option value="val2">Val-2</option>
</select>
</div>
<button class="btn">Submit</button>
</form>
[〜#〜] js [〜#〜]
$(document).ready(function () {
$('.sl').select2({
placeholder:'Select'
})
$.validator.setDefaults({
ignore: []
});
$('#test').validate({
errorElement: 'span',
errorClass: 'error',
rules: {
singleselect:'required',
multipleselect:'required',
name:'required'
},
highlight: function (element, errorClass, validClass) {
var elem = $(element);
elem.addClass(errorClass);
},
unhighlight: function (element, errorClass, validClass) {
var elem = $(element);
if(elem.hasClass('sl')) {
elem.siblings('.sl').find('.select2-choice').removeClass(errorClass);
} else {
elem.removeClass(errorClass);
}
}
});
});
元のselect
要素はSelect2プラグインによって非表示になっているため、jQuery Validateプラグインは、値が変更されたときに検証を自動的に起動するトリガーイベントを見つけることができなくなりました。
値が変更されるたびに、.valid()
メソッドを使用して、プログラムで検証をトリガーするカスタムハンドラーを作成する必要があります...
$('select').on('change', function() { // when the value changes
$(this).valid(); // trigger validation on this element
});
デモ: https://jsfiddle.net/8Lyfa3k2/4/
unhighlight
関数が明らかに壊れていました。これはうまくいくようです...
unhighlight: function (element, errorClass, validClass) {
var elem = $(element);
elem.removeClass(errorClass);
}