JQuery - jak wybrać rozwijaną pozycję na podstawie wartości


85

Chcę ustawić listę rozwijaną (wybierz), która ma być zmieniana na podstawie wartości wpisów.

mam

<select id="mySelect">
  <option value="ps">Please Select</option>
  <option value="ab">Fred</option>
  <option value="fg">George</option>
  <option value="ac">Dave</option>
</select>

I wiem, że chcę zmienić listę rozwijaną, aby była wybrana opcja o wartości „fg”. Jak mogę to zrobić za pomocą JQuery?


Myślałem, że to takie proste, ale nie działało. Chyba czas na debugowanie.
Mark W


1
Twój tytuł jest trochę mylący. Nie wybierasz listy rozwijanej, wybierasz opcję z listy rozwijanej ... dlatego jest 7 odpowiedzi, które w ogóle mi nie pomagają ...
user1566694

@ user1566694 Jeśli chcesz uzyskać informacje techniczne, nie jest to tak naprawdę nazywane menu rozwijane, ale „wybierz”
Mark W

Odpowiedzi:


152

Powinieneś użyć

$('#dropdownid').val('selectedvalue');

Oto przykład:

$('#dropdownid').val('selectedvalue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='dropdownid'>
    <option value=''>- Please choose -</option>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='selectedvalue'>There we go!</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>


21
Uzgodniono z powyższym. Według twojego kodu byłoby to$('#mySelect option[value="fg"]').attr('selected', true)
Martavis P.

Mój błąd. Widziałem, że w niektórych przypadkach nie działa, ale wyraźnie działa na skrzypcach.
Martavis P.

2
Byłbym z tym ostrożny. Nie wywołuje zdarzenia „change” w tagu <select>. Jeśli nie używasz tego zdarzenia, nie ma problemu.
Chad Fisher

2
@ChadFisher Jeśli używasz zdarzenia change, uruchom je za pomocą$('#dropdownid').val('selectedvalue').trigger('change');
Liam

Rzeczywiście, zmiana wyzwalacza pomaga, gdy napiszesz kod uzupełniający, aby wykonać określone akcje, takie jak aktualizacja modelu, nawet aktualizacje modelu widoku ASP.net również mają miejsce w przypadku zmiany zdarzenia DD. +1
Div Tiwari

23
$('#yourdropddownid').val('fg');

Opcjonalnie,

$('select>option:eq(3)').attr('selected', true);

gdzie 3jest indeks żądanej opcji.

Live Demo



8

Możesz użyć tego kodu jQuery, którego uważam za łatwiejsze w użyciu:

$('#your_id [value=3]').attr('selected', 'true');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="your_id" name="name" class="form-control input-md">
  <option value="1">Option #1</option>
  <option value="2">Option #2</option>
  <option value="3">Option #3</option>
  <option value="4">Option #4</option>
  <option value="5">Option #5</option>
  <option value="6">Option #6</option>
  <option value="7">Option #7</option>
</select>


7
 $('#mySelect').val('ab').change();

 // or

 $('#mySelect').val('ab').trigger("change");

1
lub $ ('# mySelect'). val ('ab'). trigger ("change") ;; w przypadku, gdy używasz wtyczki select2.
Vaibhav Jain

1
.change () pomogło mi zaktualizować atrybut modelu ASP.net MVC. Dziękuję za odpowiedź.
Div Tiwari

Dziękuję ... .trigger ('zmiana') Działa idealnie!
LUISAO



2

Może być za późno na odpowiedź, ale przynajmniej ktoś otrzyma pomoc.

Możesz wypróbować dwie opcje:

Jest to wynik, gdy chcesz przypisać na podstawie wartości indeksu, gdzie „0” to indeks.

 $('#mySelect').prop('selectedIndex', 0);

nie używaj „attr”, ponieważ jest przestarzałe w najnowszym jquery.

Jeśli chcesz dokonać wyboru na podstawie wartości opcji, wybierz to:

 $('#mySelect').val('fg');

gdzie „fg” jest wartością opcji


Wybór oparty na indeksie jest rzadko używany, jednak jest to dobra opcja, biorąc pod uwagę scenariusz, w którym napisałeś ogólny kod do ustawiania list rozwijanych, a wartości różnią się w zależności od różnych DD. Dzięki :).
Div Tiwari

1

$('#dropdownid').val('selectedvalue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='dropdownid'>
    <option value=''>- Please choose -</option>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='selectedvalue'>There we go!</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>


1

Ten kod zadziałał dla mnie:

$(function() {
    $('[id=mycolors] option').filter(function() { 
        return ($(this).text() == 'Green'); //To select Green
    }).prop('selected', true);
});

Za pomocą tej listy wyboru HTML:

<select id="mycolors">
      <option value="1">Red</option>
      <option value="2">Green</option>
      <option value="3">Blue</option>
</select>

0

Mam inną sytuację, w której wartości listy rozwijanej są już zakodowane na stałe. Istnieje tylko 12 okręgów, więc kontrolka interfejsu użytkownika autouzupełniania jQuery nie jest wypełniana kodem.

Rozwiązanie jest dużo łatwiejsze. Ponieważ musiałem przedzierać się przez inne słupki, w których zakładano, że kontrolka jest dynamicznie ładowana, nie znajdowałem tego, czego potrzebowałem, i w końcu to rozgryzłem.

Więc jeśli masz HTML, jak poniżej, ustawienie wybranego indeksu jest ustawione w ten sposób, zwróć uwagę na część -input, która jest dodatkiem do rozwijanego identyfikatora:

$('#project-locationSearch-dist-input').val('1');

                <label id="lblDistDDL" for="project-locationSearch-input-dist" title="Select a district to populate SPNs and PIDs or enter a known SPN or PID." class="control-label">District</label>
                <select id="project-locationSearch-dist" data-tabindex="1">
                    <option id="optDistrictOne" value="01">1</option>
                    <option id="optDistrictTwo" value="02">2</option>
                    <option id="optDistrictThree" value="03">3</option>
                    <option id="optDistrictFour" value="04">4</option>
                    <option id="optDistrictFive" value="05">5</option>
                    <option id="optDistrictSix" value="06">6</option>
                    <option id="optDistrictSeven" value="07">7</option>
                    <option id="optDistrictEight" value="08">8</option>
                    <option id="optDistrictNine" value="09">9</option>
                    <option id="optDistrictTen" value="10">10</option>
                    <option id="optDistrictEleven" value="11">11</option>
                    <option id="optDistrictTwelve" value="12">12</option>
                </select>

Inną rzeczą, jaką odkryliśmy w kontrolce autouzupełniania, jest to, jak prawidłowo ją wyłączyć / opróżnić. Mamy 3 kontrolki współpracujące ze sobą, 2 z nich wzajemnie się wykluczają:

//SPN
spnDDL.combobox({
    select: function (event, ui) {
        var spnVal = spnDDL.val();
        //fire search event
        $('#project-locationSearch-pid-input').val('');
        $('#project-locationSearch-pid-input').prop('disabled', true);
        pidDDL.empty(); //empty the pid list
    }
});
//get the labels so we have their tool tips to hand.
//this way we don't set id values on each label
spnDDL.siblings('label').tooltip();

//PID
pidDDL.combobox({
    select: function (event, ui) {
        var pidVal = pidDDL.val();
        //fire search event
        $('#project-locationSearch-spn-input').val('');
        $('#project-locationSearch-spn-input').prop('disabled', true);
        spnDDL.empty(); //empty the spn list
    }
});

Niektóre z nich wykraczają poza zakres postu i nie wiem, gdzie dokładnie to umieścić. Ponieważ jest to bardzo pomocne i zajęło trochę czasu, aby się zorientować, jest udostępniane.

Und Również ... aby włączyć taką kontrolę, jest (wyłączona, fałszywa) i NIE (włączona, prawda) - to również zajęło trochę czasu, aby się zorientować. :)

Jedyną inną rzeczą, na którą należy zwrócić uwagę, oprócz postu, jest:

    /*
Note, when working with the jQuery Autocomplete UI control,
the xxx-input control is a text input created at the time a selection
from the drop down is picked.  Thus, it's created at that point in time
and its value must be picked fresh.  Can't be put into a var and re-used
like the drop down list part of the UI control.  So you get spnDDL.empty()
where spnDDL is a var created like var spnDDL = $('#spnDDL);  But you can't
do this with the input part of the control.  Winded explanation, yes.  That's how
I have to do my notes or 6 months from now I won't know what a short hand note means
at all. :) 
*/
    //district
    $('#project-locationSearch-dist').combobox({
        select: function (event, ui) {
            //enable spn and pid drop downs
            $('#project-locationSearch-pid-input').prop('disabled', false);
            $('#project-locationSearch-spn-input').prop('disabled', false);
            //clear them of old values
            pidDDL.empty();
            spnDDL.empty();
            //get new values
            GetSPNsByDistrict(districtDDL.val());
            GetPIDsByDistrict(districtDDL.val());
        }
    });

Wszyscy się dzielili, ponieważ nauczenie się tych rzeczy w locie zajęło zbyt dużo czasu. Mam nadzieję, że to jest pomocne.


Zszedłeś z tematu tutaj. Pytanie polega na prostej zmianie wyboru na podstawie jego wartości za pomocą JQuery. Nie ma żadnych elementów interfejsu użytkownika.
Mark W


0

Możesz wybrać wartość opcji rozwijanej według nazwy

// deom
jQuery("#option_id").find("option:contains('Monday')").each(function()
{
 if( jQuery(this).text() == 'Monday' )
 {
  jQuery(this).attr("selected","selected");
  }

});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.