web-dev-qa-db-ja.com

jquery検証プラグインを使用してselect2要素を検証するにはどうすればよいですか?

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);
            }
        }
    });

});

https://jsfiddle.net/8Lyfa3k2/6/

7
midstack

元の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);
}

デモ2: https://jsfiddle.net/8Lyfa3k2/5/

16
Sparky