Mam pole wyboru, w którym mogę wybrać wiele opcji. W polu wyboru znajdują się różne grupy optyczne. Czy istnieje prosty sposób na wybór całej grupy optycznej jednocześnie w javascript?Łatwy sposób na szybkie wybranie całej grupy optycznej w polu wyboru
Odpowiedz
Proponuję przy użyciu jQuery (lub innego ram) szybko obsłużyć DOM zaznaczeń. Daj każdej grupie optycznej klasę, aby ułatwić jej przechwycenie.
$("optgroup.className").children().attr('selected','selected');
Jeśli chcesz zaznaczyć całą grupę opartą na użytkownika Wybór grupy, wykonaj następujące czynności:
$("optgroup.className").select(function(e) {
$(this).children().attr('selected','selected');
});
** Oba przykłady są niesprawdzone pseudo-code, ale powinny one pracować z minimalnym zmiany, jeśli to konieczne.
Jeśli nie możesz użyć ramki, będziesz musiał przejść przez DOM, aby znaleźć grupę opcyjną i dzieci. Możesz dołączyć detektor do elementu select
, aby pobrać wybrany element, a następnie przejść do dzieci w ten sposób.
jQuery:
$('#myoptgroup option').attr('selected', true);
Zazwyczaj nie używam jQuery do prostych zadań, takich jak ta, ale widzę tutaj jej wartość. Mimo to, jeśli wolisz rozwiązanie non-jQuery, który będzie miał korzyści z używania żadnej biblioteki, wprowadzając żadnych fałszywe identyfikatory lub klas i działa szybciej, tutaj jest jeden:
<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">
Jeśli Twój <optgroup>
ma identyfikator można zrobić z funkcją selectOptGroup
i po prostu przekaż grupę optyczną prosto do selectOptGroupOptions
.
Próbowałem zrobić coś podobnego właśnie teraz.
Po wybraniu etykiety grupy chciałem wybrać <optgroup>
s. <option>
. Pierwsza próba poszła tak:
$('select > optgroup').click(function() {
$(this).children().attr('selected', true);
});
Rozwiązanie to połowa pracowała ...
Po kliknięciu etykiecie <optgroup>
„s wszystkich swoich dzieci został wybrany.
ALE po prostu kliknięcie <option>
to wciąż wybraniu wszystkich innych <option>
S w grupie! Problem polegał na bulgotaniu zdarzeń, ponieważ <option>
jest w środku, więc technicznie to też klikasz.
Dlatego ostatnim elementem układanki było powstrzymanie zdarzenia przepuszczającego w górę w przypadku kliknięcia przycisku <option>
. Ostateczne rozwiązanie stało się następujące:
$('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();
});
Job done!
EDIT
infuriatingly to nie zadziała pracę w IE8 (i wątpliwe < IE8 - może IE9) ...
Decyduje się całkowicie ignorować zdarzenia kliknięcia w obu elementach. Jedyną alternatywą, którą mogę wymyślić jest umieszczenie elementów powyżej etykiet grupy optycznej, aby uchwycić kliknięcie, ale prawdopodobnie nie jest to warte wysiłku ...
- 1. Jak zmienić styl pola wyboru "etykieta grupy optycznej
- 2. Łatwy sposób na ustawienie CurrentCulture dla całej aplikacji?
- 3. Wyświetl etykietę grupy optycznej jako opcję początkową
- 4. jQuery, aby przejść do etykiety grupy optycznej
- 5. Przekierowanie na wybranej opcji w polu wyboru
- 6. Dlaczego weryfikacja wejścia IE10 kończy się niepowodzeniem dla tej wymaganej struktury wyboru i grupy optycznej
- 7. Zmiana opcji w polu wyboru na podstawie różnych opcji wyboru
- 8. Łatwy sposób na nieprzerwane odliczanie
- 9. Łatwy sposób na wyłączenie UITextField?
- 10. Łatwy sposób na połączenie plists?
- 11. Łatwy sposób na znalezienie Subtree w drzewie
- 12. jaki jest najlepszy sposób na wybranie grupy przycisków, które można niezależnie wybrać i aktywować?
- 13. Łatwy sposób na przeprowadzanie testów na klejnot?
- 14. Dodawanie całej zawartości nagłówka do grupy Doxygen
- 15. W jaki sposób słownik wykonuje szybkie wyszukiwanie
- 16. Erlang - przeplatają łatwy sposób
- 17. Czy istnieje łatwy sposób na zmianę wersji PHP podczas programowania?
- 18. Łatwy sposób instalowania wtyczek Eclipse na Ubuntu
- 19. Łatwy sposób na NSCoder włączone klasy
- 20. Łatwy sposób na awarię programu VB.NET
- 21. Łatwy sposób na ucieczkę Zmienne szablonu Django
- 22. Łatwy sposób na wypełnienie ResultSet z danymi
- 23. Łatwy sposób na zmianę motywu jQuery UI?
- 24. Łatwy sposób na zmniejszenie wydajności biegu tkaniny?
- 25. Zdarzenie zmiany wyzwalacza jquery w polu wyboru
- 26. jQuery/Programme Wybierz opcję w polu wyboru
- 27. Spust po kliknięciu w polu wyboru na hover
- 28. Szyny 4: Zapisz wyniki w polu wyboru na szeregową tablicę
- 29. Łatwy sposób wydrukowania bieżącego śladu stosu aplikacji?
- 30. Java: czy istnieje prosty sposób na wybranie podzbioru tablicy?
Hmm Próbowałem znaleźć rozwiązanie bez jQuery. Ale patrząc na prosty sposób, aby to zrobić; i druga strona: przechodzenie przez dom ... Jquery to jest. – blub
@blub - Myślę, że wiele osób w ten sposób korzysta z jQuery. ;-) –
Przechodzenie przez DOM nie jest strasznie trudne, ale struktura właśnie ułatwia. 'document.getElementById ('selectElementID')' dałoby ci sam element select. To tylko kwestia przemierzania jej dzieci lub możesz dodać detektor zdarzeń, aby uchwycić wybrane zdarzenie i przeanalizować, czy jest to twoja wybrana grupa optyczna. Jeśli tak, to będziesz przemierzać dzieci grupy optycznej i wybierać je również. –