我有一個select
元素,分組option
s。當單擊option
時,我需要在optgroup
中選擇(或取消選擇)所有option
。我還需要能夠一次選擇多個optgroup
。選擇optgroup中的所有選項
我希望它的工作方式是這樣的:
- 如果沒有選擇,我想點擊一個選項,並得到所有的選項中選擇的相同OPTGROUP。
- 如果已經選擇了一個或多個optgroup,我想單擊另一個optgroup中的一個選項,然後選擇所有這些選項。
- 如果已經選擇了一個或多個optgroup,我希望能夠按住Ctrl鍵並單擊未選擇的optgroup中的某個選項,並且也可以選擇該optgroup中的所有選項。
- 如果已經選擇了一個或多個optgroup,我希望能夠在所選optgroup中按住Ctrl鍵單擊一個選項,並取消選擇該組中的所有選項。
看着堆棧溢出其他答案我創建了以下內容:
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無法處理optgroup
或option
上的click
事件,這就是我將其綁定到select
然後使用$(ev.target)
的原因。但在IE8中,$(ev.target)
仍然指向整個select
而不是點擊的option
。如何找出哪個option
(或包含optgroup
)被點擊以及它是否被選中或取消選擇?
另一個意想不到的行爲,但比較小的是,在Chrome(20.0)中,取消選擇不會發生,直到鼠標離開select
。有人知道這個解決方法嗎?
這有什麼做我想做的。我想單擊一個'選項'而不是一個鏈接來選擇所有'選項' – mflodin