Jak wybrać konkretną opcję w elemencie SELECT w jQuery?
Jeśli znasz indeks, wartość lub tekst. również jeśli nie masz identyfikatora w celu bezpośredniego odniesienia.
To, to i to są pomocne odpowiedzi.
Przykładowy znacznik
<div class="selDiv">
<select class="opts">
<option selected value="DEFAULT">Default</option>
<option value="SEL1">Selection 1</option>
<option value="SEL2">Selection 2</option>
</select>
</div>
19 answers
Selektor, aby uzyskać środkową opcję-element według wartości to
$('.selDiv option[value="SEL1"]')
Dla indeksu:
$('.selDiv option:eq(1)')
Dla znanego tekstu:
$('.selDiv option:contains("Selection 1")')
EDIT: Jak skomentowano powyżej, operacja mogła być po zmianie wybranej pozycji z listy rozwijanej. W wersji 1.6 i wyższej zalecana jest metoda prop ():
$('.selDiv option:eq(1)').prop('selected', true)
W starszych wersjach:
$('.selDiv option:eq(1)').attr('selected', 'selected')
EDIT2: po komentarzu Ryana. Dopasowanie na "selekcja 10" może być niechciane. Nie znalazłem selektor aby dopasować pełny tekst, ale filtr Działa:
$('.selDiv option')
.filter(function(i, e) { return $(e).text() == "Selection 1"})
EDIT3 : zachowaj ostrożność z $(e).text()
, ponieważ może zawierać nowy wiersz, co spowoduje, że porównanie nie powiedzie się. Dzieje się tak, gdy opcje są domyślnie zamknięte (bez znacznika </option>
):
<select ...>
<option value="1">Selection 1
<option value="2'>Selection 2
:
Jeśli po prostu użyjesz e.text
wszelkie dodatkowe spacje, takie jak końcowy znak nowej linii, zostaną usunięte, dzięki czemu porównanie będzie bardziej wytrzymałe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 06:31:37
Żadna z powyższych metod nie dostarczyła mi rozwiązania, którego potrzebowałem, więc pomyślałem, że dostarczę to, co dla mnie zadziałało.
$('#element option[value="no"]').attr("selected", "selected");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-01 02:25:34
Możesz po prostu użyć metody val()
:
$('select').val('the_value');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-02 19:49:50
Według wartości, co działało dla mnie z jQuery 1.7 był poniższy kod, spróbuj tego:
$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 22:47:59
Możesz nazwać select i użyć tego:
$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);
Powinien wybrać żądaną opcję.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-01 21:02:15
Istnieje wiele sposobów, aby to zrobić, ale najczystsze podejście zostało utracone wśród najlepszych odpowiedzi i mnóstwo argumentów na val()
. Również niektóre metody zmieniły się od jQuery 1.6, więc wymaga to aktualizacji.
Dla poniższych przykładów zakładam, że zmienna $select
jest obiektem jQuery wskazującym na żądany znacznik <select>
, np. poprzez:
var $select = $('.selDiv .opts');
Uwaga 1-Użyj val () dla dopasowania wartości:
Do dopasowania wartości, użycie val()
jest znacznie prostsze niż użycie selektor atrybutów: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
Wersja settera .val()
jest zaimplementowana na znacznikach select
poprzez ustawienie właściwości selected
pasującego option
z tym samym value
, więc działa dobrze we wszystkich nowoczesnych przeglądarkach.
Uwaga 2-Użyj prop ('selected', true):
Jeśli chcesz ustawić wybrany stan opcji bezpośrednio, możesz użyć prop
(nie attr
) z parametrem boolean
(zamiast wartości tekstowej selected
):
Np. https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Uwaga 3-Zezwalaj na nieznane wartości:
Jeśli użyjesz val()
, aby wybrać <option>
, ale wartość val nie jest dopasowana( może się zdarzyć w zależności od źródła wartości), wtedy zostanie wybrana opcja " nic " i $select.val()
zwróci null
.
Więc na pokazany przykład i ze względu na solidność, przydałoby się coś takiego https://jsfiddle.net/1250Ldqn/:
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Uwaga 4-dokładny tekst dopasowanie:
Jeśli chcesz dopasować dokładny tekst, możesz użyć filter
z funkcją. np. https://jsfiddle.net/yz7tu49b/2/:
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
Chociaż jeśli możesz mieć dodatkowe białe spacje, możesz dodać wykończenie do czeku jak w
return $.trim(this.text) == "some value to match";
Uwaga 5-dopasowanie według indeksu
Jeśli chcesz dopasować według indeksu, po prostu zindeksuj dzieci select np. https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Chociaż mam tendencję do unikania bezpośrednich właściwości DOM w w dzisiejszych czasach jQuery, do przyszłościowego kodu, więc można to również zrobić jako https://jsfiddle.net/yz7tu49b/5/:
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Uwaga 6-Użyj funkcji change (), aby uruchomić nową selekcję
We wszystkich powyższych przypadkach zdarzenie zmiany nie zostanie wywołane. Jest to z założenia tak, aby nie skończyć z rekurencyjnymi zdarzeniami zmiany.
Aby wygenerować Zdarzenie change, w razie potrzeby wystarczy dodać wywołanie .change()
do obiektu jQuery select
. np. pierwszy najprostszy przykład staje się https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Istnieje również wiele innych sposobów znajdowania elementów za pomocą selektorów atrybutów, jak [value="SEL2"]
, ale musisz pamiętać, że selektory atrybutów są stosunkowo powolne w porównaniu do wszystkich pozostałych opcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 12:13:09
$(elem).find('option[value="' + value + '"]').attr("selected", "selected");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 18:17:00
/ Align = "left" / Jestem pewien, że są inne sposoby, aby to osiągnąć, ale to działa i ten kod jest testowany.
<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">
$(function() {
$(".update").bind("click", // bind the click event to a div
function() {
var selectOption = $('.selDiv').children('.opts') ;
var _this = $(this).next().children(".opts") ;
$(selectOption).find("option[index='0']").attr("selected","selected");
// $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
// $(selectOption).find("option[text='Default']").attr("selected","selected");
// $(_this).find("option[value='DEFAULT']").attr("selected","selected");
// $(_this).find("option[text='Default']").attr("selected","selected");
// $(_this).find("option[index='0']").attr("selected","selected");
}); // END Bind
}); // End eventlistener
</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
<select class="opts">
<option selected value="DEFAULT">Default</option>
<option value="SEL1">Selection 1</option>
<option value="SEL2">Selection 2</option>
</select>
</div>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 16:19:40
Używając jquery-2.1.4 znalazłem dla mnie następującą odpowiedź:
$('#MySelectionBox').val(123).change();
Jeśli masz wartość ciągu spróbuj:
$('#MySelectionBox').val("extra thing").change();
Inne przykłady nie zadziałały dla mnie, dlatego dodaję tę odpowiedź.
Znalazłem oryginalną odpowiedź na: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-05 14:58:54
Używam tego, gdy znam indeks listy.
$("#yourlist :nth(1)").prop("selected","selected").change();
Pozwala to na zmianę listy i wywołanie zdarzenia change. ": Nth (n) " liczy się od indeksu 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-11 13:47:34
Pójdę z:-
$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-14 08:22:57
Do ustawienia wartości select z zaznaczeniem:
$('select.opts').val('SEL1').change();
Dla ustawienia opcji z zakresu:
$('.selDiv option[value="SEL1"]')
.attr('selected', 'selected')
.change();
Ten kod użyj selektora, aby znaleźć zaznaczony obiekt z warunkiem, a następnie zmień wybrany atrybut przez attr()
.
Dalej, polecam dodać zdarzenie change()
Po ustawieniu atrybutu na selected
, w ten sposób Kod zakończy się zmianą select przez użytkownika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 04:44:22
Dla jQuery wybranego jeśli wysyłasz atrybut do funkcji i musisz zaktualizować-wybierz opcję
$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 14:11:57
/* This will reset your select box with "-- Please Select --" */
<script>
$(document).ready(function() {
$("#gate option[value='']").prop('selected', true);
});
</script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-30 06:49:20
Spróbuj tego
wystarczy użyć select field id zamiast #id (np.# select_name)
zamiast wartość opcji użyj opcji wybierz wartość
<script>
$(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
});
</script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-22 18:27:57
$('select').val('the_value');
wygląda dobrze i jeśli masz wiersze tabeli danych to:
$row.find('#component').val('All');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-14 13:36:26
Jeśli nie chcesz używać jQuery, możesz użyć poniższego kodu:
document.getElementById("mySelect").selectedIndex = "2";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 02:06:03
Dzięki za pytanie. Mam nadzieję, że ten kawałek kodu zadziała dla Ciebie.
var val = $("select.opts:visible option:selected ").val();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-23 04:12:15
Spróbuj tego nowego
Dokładnie to zadziała
<script>
$(document).ready(function() {
$("#id").val('select value here');
});
</script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 05:04:54