Tôi có một phần tử select
với nhóm option
s. Tôi cần phải chọn (hoặc bỏ chọn) tất cả option
s trong một số optgroup
khi nhấp chuột option
. Tôi cũng cần có thể có nhiều lần chọn optgroup
giây.Chọn tất cả các tùy chọn trong optgroup
Con đường tôi muốn nó làm việc là thế này:
- Nếu không có gì được chọn, tôi muốn nhấn một lựa chọn và nhận được tất cả các tùy chọn trong optgroup cùng chọn.
- Nếu một hoặc nhiều nhóm chọn đã được chọn, tôi muốn nhấp vào một tùy chọn trong một nhóm chọn khác và thay vào đó hãy chọn tất cả các tùy chọn đó.
- Nếu một hoặc nhiều nhóm chọn đã được chọn, tôi muốn có thể nhấn Ctrl vào một tùy chọn trong nhóm chọn không được chọn và có tất cả các tùy chọn trong nhóm chọn đó cũng được chọn.
- Nếu một hoặc nhiều nhóm chọn đã được chọn, tôi muốn có thể bấm Ctrl vào một tùy chọn trong nhóm chọn lọc đã chọn và có tất cả các tùy chọn trong nhóm đó đã bỏ chọn.
Nhìn vào câu trả lời khác trên Stack Overflow tôi đã tạo điều sau đây:
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");
}
}
tôi đã thực hiện một ví dụ ở đây: http://jsfiddle.net/mflodin/Ndkct/ (Đáng buồn jsFiddle dường như không hỗ trợ IE8 nữa.)
Điều này hoạt động như mong đợi trong Firefox (16.0), nhưng trong IE8 nó không hoạt động chút nào. Từ các câu trả lời khác, tôi đã phát hiện ra rằng IE8 không thể xử lý sự kiện click
trên optgroup
hoặc option
, đó là lý do tôi liên kết nó với select
và sau đó sử dụng $(ev.target)
. Nhưng trong IE8, $(ev.target)
vẫn trỏ đến toàn bộ số select
và không cho số option
được nhấp. Làm thế nào tôi có thể tìm ra số option
(hoặc có chứa optgroup
) đã được nhấp và liệu nó đã được chọn hay không được chọn?
Một hành vi không mong muốn khác, nhưng nhỏ hơn khi so sánh, đó là trong Chrome (20.0) việc bỏ chọn không xảy ra cho đến khi chuột rời khỏi select
. Có ai biết một giải pháp cho việc này?
này không có gì để làm với những gì tôi muốn. Tôi muốn nhấp vào một 'tùy chọn' không phải là một liên kết để chọn tất cả' tùy chọn' – mflodin