За последние 24 часа нас посетили 17695 программистов и 1627 роботов. Сейчас ищут 1227 программистов ...

При нажатие на radio сделать неактивным select

Тема в разделе "JavaScript и AJAX", создана пользователем sokol86922, 20 фев 2018.

  1. sokol86922

    sokol86922 Активный пользователь

    С нами с:
    3 мар 2017
    Сообщения:
    46
    Симпатии:
    2
    Подскажите пожалуйста как правильно сделать
    Есть два radio и под каждым из них свой список select.
    Если активный первый radio то второй select неактивный , если второй radio активный то первый select не активный.

    Ни как не могу добиться правильной работы. Либо не переключается либо один из списков не становится активным
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @sokol86922, в таких случаях показывают HTML-код, относящийся к задаче.
    Вариант jQuery
    Код (Javascript):
    1. const sel = $('select');
    2. $(':radio').on('change', function() {
    3.     let curSel = $(this).next('select');
    4.     curSel.prop('disabled', false);
    5.     sel.not(curSel).prop('disabled', true);
    6. });
    Нативный JS
    Код (Javascript):
    1. const sel = [].slice.call(document.querySelectorAll('select'));
    2. [].forEach.call(document.querySelectorAll('[type=radio]'), (el) => {
    3.     el.addEventListener('change', function() {
    4.         let curSel = this.nextElementSibling;
    5.         curSel.disabled = false;
    6.         sel.filter(s => s !== curSel)[0].disabled = true;
    7.     });
    8. });
    --- Добавлено ---
    P.S. Вместо метода .call(), можно использовать Array.from().
     
    Dimon2x и MouseZver нравится это.
  3. sokol86922

    sokol86922 Активный пользователь

    С нами с:
    3 мар 2017
    Сообщения:
    46
    Симпатии:
    2
    Спасибо
    но тоже как то не корректно работает включается, но не переключается между первым и вторым
    я наверно что то не так делаю подскажите плиз
    вот структура формы
    HTML:
    1.    <form name="form1" action="#" method="post">
    2.                <input name="Name1" type="radio" value="" checked>  
    3.                <select size="1" name="select1">
    4.                <option value="value1">Item1</option>
    5.                </select>
    6.                   <input name="Name1" type="radio" value="" >
    7.                   <select size="1" name="select2">
    8.                   <option value="value2">Item2</option>
    9.                   </select>
    10.                <input type="submit" value="Send">
    11.              </form>
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @sokol86922, в первую очередь, нужно смотреть в консоль, т.к. возможно, что вам там кричат об ошибках, а вы их не видите.
    Пробуйте такой вариант
    Код (Javascript):
    1. const form = document.querySelector('form[name=form1]'),
    2.     rad = Array.from(form.querySelectorAll('input[name=Name1]')),
    3.     sel = Array.from(form.querySelectorAll('select[name^=select]'));
    4. rad.forEach((el, i) => {
    5.     el.addEventListener('change', function() {
    6.         let indx = rad.indexOf(this);
    7.         sel.forEach((s, i) => {
    8.             s.disabled = i !== indx;
    9.         });
    10.     });
    11.     sel[i].disabled = !el.checked;
    12. });
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    @Deonis Можно рассказать про [].slice.call? У меня от этого вообще мозг зависает, не понимаю, как работает.

    Если просто так сделать sel2 = document.querySelectorAll('select') то будет NodeList, а с [].slice.call массив и как понимать, когда это надо применять?

    Или это надо делать, когда из NodeList надо преобразовать массив?
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Именно так.
    Когда в этом есть необходимость или для удобства.
    Не вижу смысла пересказывать то, что уже написано, при чем не один раз
    --- Добавлено ---
    Не переживайте. От JS мозг виснет не только у новичков ;)
     
  7. sokol86922

    sokol86922 Активный пользователь

    С нами с:
    3 мар 2017
    Сообщения:
    46
    Симпатии:
    2
    Спасибо работает. У меня две были ошибки нужно было сразу в форму обернуть и был подключен сss бутсреп не хотел работать верно. отключил все заработало .