Як встановити перший параметр у вікні вибору за допомогою jQuery?


134

У мене два selectполя HTML . Мені потрібно скинути одне selectполе, коли я роблю вибір в іншому.

<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>

Коли я вибрати опцію з перших select(тобто id="name"), мені потрібно скинути секунду selectдо select all; подібним чином , коли я вибираю варіант другий select(тобто id="name2"), мені потрібно скинути першу selectв select all.

Як я можу це зробити?


Я змінив назву з [...] скинути [...] на [...], встановив перший параметр на [...], оскільки скидання означає встановлення початково завантаженого за замовчуванням значення
— Pierre de LESPINAY

Відповіді:


277

Щось подібне повинно зробити трюк: https://jsfiddle.net/TmJCE/898/

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


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

15
Щоправда, але він все ще показує основну концепцію, і в цьому випадку схоже, що він хоче скинути її на "Вибрати все", що є першим варіантом.
— Джек

2
Якщо ви використовуєте це з <button>елемента, обов'язково не встановлюйте type="reset". Це не спрацювало для мене, поки я не встановив типbutton
— Каумони

3
Я вибираю перший елемент випадаючого, але текст все ще старий.
— VaTo

Я використовую це як інше поле вибору, це нормально? чи я не отримую це належним чином?
— ankit suthar

1
@ankitsuthar Він змінить вибраний варіант значення selectна вказане значення. select.prop('selectedIndex', 0)скине його перший варіант, select.prop('selectedIndex', 1)встановить його на другий варіант.
— Джек

44

Якщо ви просто хочете скинути вибраний елемент на його перше місце, найпростішим способом може бути:

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

Щоб скинути всі обрані елементи в документі:

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

РЕДАКТУВАННЯ: Щоб уточнити відповідно до коментаря нижче, цей елемент скидає елемент вибору до його першого пустого запису та лише якщо у списку існує порожня запис.


Так, це працювало майже весь час. Інші рішення іноді можуть мати проблеми. Справді найпростіший спосіб.
— Sworup Shakya

5
Лише попередження: це спрацює лише в тому випадку, якщо ви дійсно хочете, щоб перший параметр був обраний і перший параметр має набір значень порожнього. Якщо ваш перший параметр має якесь інше значення, або якщо жодна опція у полі SELECT не містить значення, це не вплине на будь-які зміни. Або якщо інший варіант має значення порожнього, він замість нього вибере цей варіант.
— HBlackorby

@HBlackorby, ваш коментар був корисним, але 1) Параметр "З" value=""може з'являтися в будь-якому порядку. 2) Варіант без атрибута значень, тобто <option></option>не є тим самим, що параметр з атрибутом значення порожнього рядка, тобто <option value=""></option>ви зрозуміли, що нам потрібна value="" частина 3) Навіть якщо немає значення <option>зі значенням порожнього рядка; налаштування .val('')"вплине на зміну", з'явиться вибір, щоб змінити порожнє, чи не так? Принаймні, в моєму Chrome ...
— Червоний горох

21

Як вказував @PierredeLESPINAY в коментарях, моє оригінальне рішення було неправильним - воно скине спадне меню до найвищого варіанту, але тільки тому, що undefinedзначення повернення вирішено на індекс 0.

Ось правильне рішення, яке враховує selectedвластивість:

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

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


Оригінальна відповідь - НЕПРАВИЛЬНА

У jQuery 1.6+ вам потрібно використовувати .propметод, щоб отримати вибір за замовчуванням:

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

Щоб динамічно скинути його, коли зміниться перше спадне меню, використовуйте .changeподію:

$('#name').change(function(){
  $('#name2').val( $('#name2').prop('defaultSelected') );
});

що сказав Єнс Роланд, підтримуючи програму Viceversa
— zynaps

Але навпаки, підтримка не має сенсу. Це еквівалентно великій спаді. Я не розумію.
— Єнс Роланд

достатньо лише написати$('#name2').val( $(this).prop('defaultSelected') );
— vsync

@vsync: $(this)посилається на $('#name'), ні $('#name2'), так ні
— Єнс Роланд

1
defaultSelectedє <option>власністю, завжди повернеться undefinedна<select>
— Pierre de LESPINAY

7

Використовуйте це, якщо ви хочете скинути вибір до параметра, який має атрибут "вибраний". Працює аналогічно вбудованій функції javascript для select у функцію form.reset ().

 $("#name").val($("#name option[selected]").val());


4

Ось як я змусив його працювати, якщо ви просто хочете повернути його до свого першого варіанту, наприклад, "Виберіть параметр" "Select_id_wrap", очевидно, є роздільником навколо вибору, але я просто хочу зробити це зрозумілим на випадок, якщо він має будь-яке відношення до того, як це працює. Моя скидає функцію клацання, але я впевнений, що вона також буде працювати всередині зміни, а також ...

$("#select_id_wrap").find("select option").prop("selected", false);

3

Скористайтеся наведеним нижче кодом. Дивіться це, працюючи тут http://jsfiddle.net/usmanhalalit/3HPz4/

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

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

Знову - працює, лише якщо за замовчуванням встановлено перший / порожній
— Йенс Роланд

3

Це також можна використовувати

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


$('#name').change(function(){
    $('#name2').val('');
});

3

Це найбільш гнучкий / багаторазовий спосіб скидання всіх вибраних вікон у формі.

      var $form = $('form') // Replace with your form selector
      $('select', $form).each(function() {
        $(this).val($(this).prop('defaultSelected'));
      });

1

Ось як обробити його з випадковим елементом опції, визначеним як значення за замовчуванням (у цьому випадку текст 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>

0

Ви можете спробувати це:

$( 'select' ).each( function () {
    if ( $( this ).children().length > 0 ) {
        $( $( this ).children()[0] ).attr( 'selected', 'selected' );
        $( this ).change();
    }
} );

0

У мене виникла проблема з використанням властивості defaultSelected у відповіді @Jens Roland в jQuery v1.9.1. Більш загальним способом (з багатьма залежними виборами) було б помістити атрибут за замовчуванням даних у залежний вибір і потім повторити їх при повторному перезавантаженні.

<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>

І javascript ...

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

Дивіться http://jsfiddle.net/8hvqN/ для робочої версії вище.


0

Я створив нову опцію в тегу select, який має значення порожнього рядка ("") і використовував:

$("form.query").find('select#topic').val("");

0

Використовуйте jquery для прив'язки події onchange для вибору, але вам не потрібно створювати інший $(this)об’єкт 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;
    }
});

0

Використовуйте цей код, щоб скинути всі поля вибору до параметра за замовчуванням, де визначений вибраний атрибут.

<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>

0

Ось найкраще рішення, яке я використовую. Це стосується більше 1 slectbox

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


0

Параметр 1 в елементі вибору може бути виконаний цим сегментом. Щоб візуально показати це, у вас є tp add .trigger ('change') в кінці.

$('#name').removeAttr('selected').find('option:first').attr('selected', 'selected').trigger("change");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.