Так что это заняло у меня некоторое время, но я думаю, что у меня есть функциональность, которую вы ищете.
Проверьте эту скрипку
Идея состоит в том, чтобы создатьмассив для отслеживания того, что выбрано.Обычное поведение поля множественного выбора, если вы только щелкаете, состоит в том, чтобы отменить выбор всех других вариантов выбора и выбрать то, на что вы нажали.
Поэтому, вместо того, чтобы интересоваться тем, что находится в окне выбора, мы видим, какая опция нажата (в mousedown) и добавляем ее в наш личный список того, что выбрано, затем обновляем поле выбора, чтобы отразить то, что вlist (при наведении мыши).
Это предотвращает перетаскивание пользователем элемента для выбора нескольких элементов в окне выбора, но, возможно, это может привести к путанице.
var selection = [];
$('#the_box > option').mousedown(function(){
if(selection.length < 1){
selection.push($(this).val());
} else {
var found = 0;
for(i = 0; i < selection.length; i++) {
if(selection[i] == $(this).val()){
selection.splice(i, 1);
found = 1;
break;
}
}
if(found === 0){
selection.push($(this).val());
}
}
});
$('#the_box').bind('mouseup mouseout', function(){
$(this).children('option').each(function(){
$(this).removeAttr('selected');
});
$(this).children('option').each(function(){
for(i = 0; i < selection.length; i++){
if($(this).val() == selection[i]){
$(this).attr('selected','selected');
}
}
});
});
Однако вы могли бы сделать это точно с помощью списка или набора элементов div вместо использования собственных тегов <select>
, что на самом деле было бы проще, если бы вы использовали этометод (из-за того, что не нужно обходить поведение по умолчанию для окна выбора): P