Jak ustawić pierwszą opcję na polu wyboru za pomocą jQuery?

134

Mam dwa selectpola HTML . Muszę zresetować jedno selectpudełko, gdy dokonuję wyboru w innym.

<select id="name" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

Kiedy wybieram opcję pierwszej select(tj. id="name"), Muszę zresetować drugą selectdo select all; podobnie, gdy wybieram opcję drugiej select(tj. id="name2"), muszę zresetować pierwszą selectna select all.

Jak mogę to zrobić?

Anish
źródło
Zmieniłem tytuł z [...] reset [...] na [...] ustawiłem pierwszą opcję na [...], ponieważ reset oznacza ustawienie domyślnej początkowo załadowanej wartości
Pierre de LESPINAY

Odpowiedzi:

277

Coś takiego powinno załatwić sprawę: https://jsfiddle.net/TmJCE/898/

$('#name2').change(function(){
    $('#name').prop('selectedIndex',0);
});


$('#name').change(function(){
    $('#name2').prop('selectedIndex',0);
});
Jacek
źródło
15
To prawda, ale nadal pokazuje podstawową koncepcję iw tym przypadku wygląda na to, że chce zresetować ją do „Wybierz wszystko”, która jest pierwszą opcją.
Jack
2
Jeśli używasz tego z <button>elementu, pamiętaj, aby nie ustawiać type="reset". To nie zadziałało, dopóki nie ustawiłem pisania nabutton
Caumons,
3
Wybieram pierwszy element menu, ale tekst jest nadal stary.
VaTo
Używam tego jako reszty pola wyboru, czy to w porządku? czy nie otrzymuję tego prawidłowo?
ankit suthar
1
@ankitsuthar Zmieni wybraną opcję selectna podaną wartość. select.prop('selectedIndex', 0)zresetuje pierwszą opcję, select.prop('selectedIndex', 1)ustawi ją na drugą opcję.
Jack
44

Jeśli chcesz po prostu zresetować zaznaczony element do jego pierwszej pozycji, najprostszym sposobem może być:

$('#name2').val('');

Aby zresetować wszystkie zaznaczone elementy w dokumencie:

$('select').val('')

EDYCJA: Aby wyjaśnić zgodnie z komentarzem poniżej, powoduje to zresetowanie wybranego elementu do pierwszego pustego wpisu i tylko wtedy, gdy na liście znajduje się pusty wpis.

AndreasT
źródło
Tak, to działałoby prawie cały czas. Inne rozwiązania mogą czasami powodować problemy. Doprawdy najprostszy sposób.
Sworup Shakya
5
Tylko ostrzeżenie: zadziała to tylko wtedy, gdy rzeczywiście chcesz mieć wybraną pierwszą opcję, a pierwsza opcja ma ustawioną wartość pustą. Jeśli pierwsza opcja ma inną wartość lub jeśli żadna opcja w polu SELECT nie ma wartości pustej, nie wpłynie to na żadną zmianę. Lub, jeśli inna opcja ma wartość pustą, zamiast tego wybierze tę opcję.
HBlackorby
@HBlackorby, Twój komentarz był pomocny, ale 1) Opcja z value=""może pojawić się w dowolnej kolejności. 2) Opcja bez atrybutu wartości, tj. <option></option>Nie jest tym samym, co opcja z atrybutem wartości w postaci pustego łańcucha, tzn <option value=""></option>. Jasno wskazałeś, że potrzebujemy value="" części 3) Nawet jeśli nie ma wartości <option>z pustym ciągiem; ustawienie .val('')„wpłynie na zmianę”, zaznaczenie zmieni się na puste, prawda? Przynajmniej w moim Chrome ...
The Red Pea
21

Jak wskazał @PierredeLESPINAY w komentarzach, moje oryginalne rozwiązanie było niepoprawne - zresetowałoby menu rozwijane do najwyższej opcji, ale tylko dlatego, że undefinedwartość zwracana została rozwiązana na indeks 0.

Oto poprawne rozwiązanie, które bierze selectedpod uwagę właściwość:

$('#name').change(function(){
    $('#name2').val(function () {
        return $(this).find('option').filter(function () {
            return $(this).prop('defaultSelected');
        }).val();
    });
});

DEMO : http://jsfiddle.net/weg82/257/


Oryginalna odpowiedź - NIEPRAWIDŁOWA

W jQuery 1.6+ musisz użyć .propmetody, aby uzyskać domyślny wybór:

// Resets the name2 dropdown to its default value
$('#name2').val( $('#name2').prop('defaultSelected') );

Aby resetować się dynamicznie po zmianie pierwszego menu rozwijanego, użyj .changezdarzenia:

$('#name').change(function(){
  $('#name2').val( $('#name2').prop('defaultSelected') );
});
Jens Roland
źródło
co powiedział Jens Roland ze wsparciem viceversa
zynaps
Ale na odwrót wsparcie nie ma sensu - to jest równoważne z jednym dużym menu. Nie rozumiem.
Jens Roland,
wystarczy po prostu napisać$('#name2').val( $(this).prop('defaultSelected') );
vsync
@vsync: $(this)odnosi się do $('#name'), nie $('#name2'), więc nie
Jens Roland
1
defaultSelectedjest <option>własnością, zawsze powróci undefinedna<select>
Pierre de LESPINAY
7

Użyj tego, jeśli chcesz zresetować wybór do opcji, która ma atrybut „wybrane”. Działa podobnie do wbudowanej funkcji javascript form.reset () do select.

 $("#name").val($("#name option[selected]").val());
Sathesh
źródło
4

To mi bardzo pomaga.

$(yourSelector).find('select option:eq(0)').prop('selected', true);
Andrej Gaspar
źródło
4

Oto jak to działało, jeśli chcesz tylko przywrócić to do swojej pierwszej opcji np. "Wybierz opcję" "Select_id_wrap" to oczywiście element div wokół zaznaczenia, ale chcę to tylko wyjaśnić na wszelki wypadek jakikolwiek wpływ na to, jak to działa. Mój resetuje się do funkcji kliknięcia, ale jestem pewien, że będzie działać również w przypadku zmiany ...

$("#select_id_wrap").find("select option").prop("selected", false);
Ian
źródło
3

Użyj poniższego kodu. Zobacz, jak działa tutaj http://jsfiddle.net/usmanhalalit/3HPz4/

 $(function(){
     $('#name').change(function(){
         $('#name2 option[value=""]').attr('selected','selected');
     });

     $('#name2').change(function(){
         $('#name option[value=""]').attr('selected','selected');
     });
 });
Muhammad Usman
źródło
Ponownie - działa tylko wtedy, gdy wartość domyślna jest ustawiona jako pierwsza / pusta
Jens Roland
3

Można to również wykorzystać

$('#name2').change(function(){
    $('#name').val('');//You can set the first value of first one if that is not empty
});


$('#name').change(function(){
    $('#name2').val('');
});
Azam Alvi
źródło
3

Jest to najbardziej elastyczny / wielokrotnego użytku sposób resetowania wszystkich zaznaczonych pól w formularzu.

      var $form = $('form') // Replace with your form selector
      $('select', $form).each(function() {
        $(this).val($(this).prop('defaultSelected'));
      });
Nick Barrett
źródło
1

Oto jak sobie z tym poradzić za pomocą losowego elementu opcji zdefiniowanego jako wartość domyślna (w tym przypadku domyślnym jest tekst 2):

<select id="name2" >
   <option value="">select all</option>
   <option value="1">Text 1</option>
   <option value="2" selected="selected">Text 2</option>
   <option value="3">Text 3</option>
</select>
<script>
    $('#name2 option[selected]').prop('selected', true);
</script>
mightytightywty
źródło
0

Możesz spróbować tego:

$( 'select' ).each( function () {
    if ( $( this ).children().length > 0 ) {
        $( $( this ).children()[0] ).attr( 'selected', 'selected' );
        $( this ).change();
    }
} );
Aki143S
źródło
0

Miałem problem z użyciem właściwości defaultSelected w odpowiedzi @Jens Roland w jQuery v1.9.1. Bardziej ogólnym sposobem (z wieloma selekcjami zależnymi) byłoby umieszczenie atrybutu wartości domyślnych danych w selekcjach zależnych, a następnie iterowanie przez nie podczas resetowania.

<select id="name0" >
    <option value="">reset</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name1" class="name" data-default="1">
    <option value="">select all</option>
    <option value="1" selected="true">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" class="name" data-default="2">
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2" selected="true">Text 2</option>
    <option value="3">Text 3</option>
</select>

A javascript ...

$('#name0').change(function(){
    if($('#name0').val() == '') {
        $('select.name').each(function(index){
          $(this).val($(this).data('default'))  
        })
    } else {
      $('select.name').val($('#name0').val() );
    }
});

Zobacz http://jsfiddle.net/8hvqN/, aby uzyskać działającą wersję powyższego.

spyle
źródło
0

Utworzyłem nową opcję w tagu select, która ma wartość pustego ciągu („”) i użyłem:

$("form.query").find('select#topic').val("");
Leye Odumuyiwa
źródło
0

Użyj jquery do powiązania zdarzenia onchange do wybrania, ale nie musisz tworzyć kolejnego $(this)obiektu jquery.

$('select[name=name2]').change(function(){
    if (this.value) {
        console.log('option value = ', this.value);
        console.log('option text  = ', this.options[this.selectedIndex].text);

        // Reset selected
        this.selectedIndex = this.defaultSelected;
    }
});
John Magnolia
źródło
0

Użyj tego kodu, aby zresetować wszystkie pola wyboru do opcji domyślnej, w której zdefiniowany jest wybrany atrybut.

<select id="name1" >
    <option value="1">Text 1</option>
    <option value="2" selected="selected" >Default Text 2</option>
    <option value="3">Text 3</option>
</select>
<select id="name2" >
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3" selected="selected" >Default Text 3</option>
</select>
<script>
    $('select').each( function() {
        $(this).val( $(this).find("option[selected]").val() );
    });
</script>
Sjoerd Linders
źródło
0

Oto najlepsze rozwiązanie, którego używam. Dotyczy to ponad 1 slectboxa

$("select").change(function(){
    var thisval = $(this).val();
    $("select").prop('selectedIndex',0);
    $(this).val(thisval);
})

Anh
źródło
0

W tym segmencie można ustawić opcję 1 w wybranym elemencie. Aby to pokazać wizualnie, musisz dodać .trigger ('zmiana') na końcu.

$('#name').removeAttr('selected').find('option:first').attr('selected', 'selected').trigger("change");
Chamod Pathirana
źródło