Этот ответ работает в следующих случаях:
- Обычный клик
- Только mousedown (перед перемещением мыши мышь передвигается наружу)
- Клавиатура
- Если есть разные опции с одинаковым значением
Код:
$('#mySelect').on('change', function() {
if (this.selectedOptions.length < 4) {
$(this).find(':selected').addClass('selected');
$(this).find(':not(:selected)').removeClass('selected');
}else
$(this)
.find(':selected:not(.selected)')
.prop('selected', false);
});
Демо
Или, для старых браузеров, которые не поддерживают selectedOptions
,
$('#mySelect').on('change', function() {
var $sel = $(this).find(':selected');
if ($sel.length < 4) {
$sel.addClass('selected');
$(this).find(':not(:selected)').removeClass('selected');
}else
$(this)
.find(':selected:not(.selected)')
.prop('selected', false);
});
Демо