Tôi có một hộp chọn trong đó tôi có thể chọn nhiều tùy chọn. Trong hộp chọn là nhiều optgroups. Có cách nào dễ dàng để chọn toàn bộ optgroup cùng một lúc trong javascript?Cách dễ dàng để chọn nhanh toàn bộ nhóm chọn trong hộp chọn
Trả lời
tôi đề nghị sử dụng jQuery (hoặc khung khác) để nhanh chóng xử lý các lựa chọn DOM. Cung cấp cho mỗi optgroup một lớp để làm cho nó dễ dàng hơn để lấy nó.
$("optgroup.className").children().attr('selected','selected');
Nếu bạn muốn chọn toàn bộ nhóm dựa trên người dùng chọn nhóm, làm như sau:
$("optgroup.className").select(function(e) {
$(this).children().attr('selected','selected');
});
** Cả hai ví dụ là chưa được kiểm tra mã giả, nhưng họ nên làm việc với tối thiểu thay đổi, nếu cần.
Nếu bạn không thể sử dụng khung, bạn sẽ phải tự mình duyệt DOM để tìm nhóm và trẻ em. Bạn có thể đính kèm một trình lắng nghe vào phần tử select
để lấy phần tử đang được chọn, sau đó đi qua các con theo cách đó.
jquery:
$('#myoptgroup option').attr('selected', true);
Tôi thường chống lại việc sử dụng jQuery cho các công việc đơn giản như thế này nhưng tôi có thể thấy giá trị của nó ở đây. Tuy nhiên, nếu bạn muốn có một giải pháp phi jQuery mà sẽ có những lợi ích của việc sử dụng không có thư viện, giới thiệu không có id giả mạo hoặc các lớp học và chạy nhanh hơn, đây là một trong:
<script type="text/javascript">
function selectOptGroupOptions(optGroup, selected) {
var options = optGroup.getElementsByTagName("option");
for (var i = 0, len = options.length; i < len; i++) {
options[i].selected = selected;
}
}
function selectOptGroup(selectId, label, selected) {
var selectElement = document.getElementById(selectId);
var optGroups = selectElement.getElementsByTagName("optgroup");
var i, len, optGroup;
for (i = 0, len = optGroups.length; i < len; i++) {
optGroup = optGroups[i];
if (optGroup.label === label) {
selectOptGroupOptions(optGroup, selected);
return;
}
}
}
</select>
<select id="veg" multiple>
<optgroup label="roots">
<option>Swede</option>
<option>Carrot</option>
<option>Turnip</option>
</optgroup>
<optgroup label="leaves">
<option>Spinach</option>
<option>Kale</option>
</optgroup>
</select>
<input type="button" onclick="selectOptGroup('veg', 'roots', true)" value="Select roots">
Nếu bạn <optgroup>
có một id bạn có thể làm với chức năng selectOptGroup
và chỉ cần chuyển nhóm chọn thẳng vào selectOptGroupOptions
.
Tôi đã cố gắng làm điều gì đó tương tự ngay bây giờ.
Tôi muốn chọn <optgroup>
's <option>
giây khi nhấp vào nhãn của nhóm. Nỗ lực đầu tiên đã đi như thế này:
$('select > optgroup').click(function() {
$(this).children().attr('selected', true);
});
nửa Giải pháp này làm việc ...
Khi nhấp nhãn 's <optgroup>
tất cả các con của nó đã trở thành lựa chọn.
NHƯNG khi chỉ đơn giản là nhấp vào một <option>
nó vẫn chọn tất cả các <option>
s khác trong nhóm! Vấn đề là sự kiện sôi nổi, bởi vì <option>
nằm trong số <optgroup>
về mặt kỹ thuật bạn cũng đang nhấp vào nó.
Vì vậy, phần cuối cùng của câu đố là để ngăn chặn sự kiện sôi lên trên trong trường hợp một số <option>
thực sự được nhấp để thay thế. Giải pháp cuối cùng sau đó trở thành:
$('select > optgroup').click(function() {
$(this).children().attr('selected', true);
});
$('select > optgroup > option').click(function (e) {
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
});
Hoàn thành công việc!
EDIT
Infuriatingly này không hoạt động làm việc trong IE8 (và nghi ngờ < IE8 - có lẽ IE9) ...
Nó quyết định bỏ qua hoàn toàn các sự kiện nhấp chuột trên cả hai yếu tố. Cách thay thế duy nhất mà tôi có thể nghĩ đến là định vị các yếu tố phía trên nhãn nhóm để nắm bắt nhấp chuột, nhưng có lẽ nó không đáng để ...
- 1. Hộp chọn nhiều với nhóm chọn: Chọn một nhóm cho mỗi nhóm
- 2. jQuery - chọn tùy chọn trong hộp chọn
- 3. Làm thế nào để thay đổi phong cách của một hộp Chọn 'nhãn nhóm chọn lọc
- 4. Cách nhanh nhất để chọn một số lượng lớn hộp kiểm và chọn/chọn chúng là gì?
- 5. jQuery/Programmatically Chọn một tùy chọn trong hộp chọn
- 6. Làm cách nào để dễ dàng chỉnh sửa kiểu của văn bản đã chọn trong JTextPane?
- 7. Cách dễ dàng để thực hiện tùy chọn --quiet trong tập lệnh python
- 8. Knockoutjs chọn với nhóm tùy chọn
- 9. Bỏ chọn các tùy chọn đã chọn trong nhiều menu và chọn nhóm
- 10. Bộ chọn '&' chọn gì?
- 11. Bộ chọn Tuần jQuery
- 12. Đã chọn nhóm trong Rails
- 13. Góc được chọn Hộp kiểm đã chọn
- 14. Hộp thoại bộ chọn tùy chỉnh
- 15. Chọn kiểu nhóm trong gridview
- 16. Thay đổi tùy chọn trong hộp chọn dựa trên các tùy chọn chọn khác nhau
- 17. Bộ chọn jQuery cho nhãn của hộp kiểm
- 18. Bộ chọn trống jQuery (bộ chọn rỗng)
- 19. Loại nhóm để chọn trong OpenLDAP để nhóm người dùng
- 20. Bộ chọn số hộp thoại Android
- 21. Cách bỏ chọn hộp kiểm Android đã chọn
- 22. Regex tùy chọn nhóm
- 23. Qt, Hộp thoại Bộ chọn Màu?
- 24. đếm số lượng lựa chọn trong hộp chọn nhiều
- 25. Đệm trong các hộp chọn
- 26. Làm cách nào để bật/tắt tùy chọn trong Hộp Chọn bằng cách sử dụng jquery
- 27. Buộc người dùng chọn tùy chọn trong hộp thoại
- 28. JQuery refresh chọn hộp
- 29. Chuyển trên một số tùy chọn trong hộp chọn
- 30. DataGridView: Cách chọn toàn bộ Cột và bỏ chọn mọi thứ khác?
Hmm tôi đã cố gắng tìm một giải pháp không có jQuery. Nhưng nhìn vào cách đơn giản để làm điều đó; và phía bên kia: đi ngang qua nhà thờ ... Jquery nó. – blub
@blub - Tôi nghĩ rất nhiều người tham gia vào jQuery theo cách đó. ;-) –
Di chuyển bản thân DOM không quá khó khăn, nhưng một khung làm việc dễ dàng hơn. 'document.getElementById ('selectElementID')' sẽ tự cung cấp cho bạn phần tử chọn. Sau đó, nó chỉ là một vấn đề đi qua con cái của nó hoặc bạn có thể thêm một người nghe sự kiện để nắm bắt sự kiện chọn và phân tích nếu đó là nhóm chọn bạn muốn. Nếu vậy, sau đó bạn sẽ đi qua các trẻ em optgroup và chọn chúng là tốt. –