У меня есть элемент select
сгруппированным option
s. Мне нужно выбрать (или отменить выбор) все option
в optgroup
при нажатии option
. Я также должен иметь возможность одновременного выбора нескольких optgroup
.
Я хочу, чтобы он работал:
- Если ничего не выбрано, я хочу щелкнуть один параметр и получить все параметры в той же выбранной группе optgroup.
- Если одна или несколько optgroups уже выбраны, я хочу нажать одну опцию в другой optgroup и выбрать все эти опции.
- Если одна или несколько optgroups уже выбраны, я хочу иметь возможность Ctrl-щелкнуть опцию в не выбранной группе opt и выбрать все опции в этой группе optgroup.
- Если одна или несколько optgroups уже выбраны, я хочу иметь возможность Ctrl-щелкнуть опцию в выбранной группе opt и убрать все опции в этой группе.
Глядя на другие ответы на Stack Overflow, я создал следующее:
HTML:
<select multiple="multiple" size="10">
<optgroup label="Queen">
<option value="Mercury">Freddie</option>
<option value="May">Brian</option>
<option value="Taylor">Roger</option>
<option value="Deacon">John</option>
</optgroup>
<optgroup label="Pink Floyd">
<option value="Waters">Roger</option>
<option value="Gilmour">David</option>
<option value="Mason">Nick</option>
<option value="Wright">Richard</option>
</optgroup>
</select>
JQuery
$('select').click(selectSiblings);
function selectSiblings(ev) {
var clickedOption = $(ev.target);
var siblings = clickedOption.siblings();
if (clickedOption.is(":selected")) {
siblings.attr("selected", "selected");
} else {
siblings.removeAttr("selected");
}
}
Я привел пример здесь: http://jsfiddle.net/mflodin/Ndkct/ (К сожалению, jsFiddle, похоже, больше не поддерживает IE8.)
Это работает как ожидается в Firefox (16.0), но в IE8 он вообще не работает. Из других ответов я выяснил, что IE8 не может обрабатывать событие click
на optgroup
или option
, поэтому я привязываю его к select
, а затем использую $(ev.target)
. Но в IE8 $(ev.target)
все еще указывает на весь select
, а не на option
, который был нажат. Как узнать, какой option
(или содержащий optgroup
), который был нажат, и был ли он выбран или отменен?
Другим неожиданным поведением, но незначительным в сравнении, является то, что в Chrome (20.0) снятие выделения происходит не до тех пор, пока мышь не покинет select
. Кто-нибудь знает об этом?