我有一个select
带有分组的元素option
。单击 an时,我需要选择(或取消选择)所有option
s 。我还需要能够一次选择多个 s。optgroup
option
optgroup
我希望它的工作方式是这样的:
- 如果未选择任何内容,我想单击一个选项并选择同一 optgroup 中的所有选项。
- 如果已经选择了一个或多个 optgroup,我想单击另一个 optgroup 中的一个选项,然后选择所有这些选项。
- 如果已经选择了一个或多个 optgroup,我希望能够按住 Ctrl 键单击未选择的 optgroup 中的选项,并选择该 optgroup 中的所有选项。
- 如果已经选择了一个或多个 optgroup,我希望能够按住 Ctrl 键单击所选 optgroup 中的一个选项,并取消选择该组中的所有选项。
查看 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 无法处理orclick
上的事件,这就是我将其绑定到然后使用. 但在 IE8 中,仍然指向整个而不是被点击的那个。如何找出单击了哪个(或包含)以及它是被选中还是取消选中?optgroup
option
select
$(ev.target)
$(ev.target)
select
option
option
optgroup
另一个意想不到的行为,但相比之下较小,是在 Chrome (20.0) 中,直到鼠标离开select
. 有人知道解决方法吗?</p>