Форумы / National / Russian / [решено] jquery показ блоков из комбинации select и radio

foxss
#1 26.04.2017 02:09

есть документ

<blok1>
    <select>
​</blok1>

<blok2>
    <radio1>
​</blok2>

<blok3>
    <radio2>
​</blok3>
работать должно так:
при выборе п.1 селекта должен показатся блок2 а блок3 должен показыватся в зависимости от выбора радио1
при выборе п.2 селекта должен показатся блок2 а блок3 НЕ должен показыватся в зависимости от выбора радио1
 
однако если выбрать в селекте сначала п.1 а потом п.2 то блок3 ведет себя так же как и при выборе п.1
 
вот мой скрипт
$('#parametrs select').change(function(){
    $('.hide').hide(300);
    $out = $(this).val();
    if ($out == 'blok3') {
        $('#blok2').show(300);
    }
    if ($out == 'blok2') {
        $('#blok2').show(300);
        $('#blok2 input').change(function() {
            $outs = $(this).val();
            if ($outs == 'скрыть блок'){
                $('#blok3').hide(300);
            }else{
                $('#blok3').show(300);
            }
        });
    }
});
Отредактировано: foxss (01.05.2017 00:15, 6 лет назад)
DenDevin
#2 27.04.2017 06:41
Предоставьте весь хтмл и яваскрипт, ато не понятно, какие элементы отлавливает скрипт.
foxss
#3 27.04.2017 19:22

ну вот http://jsfiddle.net/ng8vwr4z/ полный ХТМЛ и скрипт но че это изменит я хз в 1 сообщении практически тоже самое.

Отредактировано: foxss (26.05.2017 04:58, 6 лет назад)
DenDevin
#4 27.04.2017 20:03
Во первых, у вас ошибка в теге лейбл, правильно писать нужно . Во вторых, перед тем как показывать или скрывать блок, я думаю нужно проверять "выбранность" радиокнопки. Судя по вашим условиям, блок 3 должен быть видимым или скрытым в зависимости от выбора радио.

Добавлено 19 минут спустя:

Присвойте радиобосам value, определяйте какой выбран сейчас и от этого условия скрывайте или показывайте блок. Просто проверка if(out=="скрыть блок") не совсем корректна, мне кажется. лучше использовать проверку на уникальное value , написанное латиницей, и не фразой, а одним словом.
Отредактировано: DenDevin (27.04.2017 20:22, 6 лет назад)
foxss
#5 27.04.2017 20:31

ну вот https://jsfiddle.net/ng8vwr4z/ полный ХТМЛ и скрипт но че это изменит я хз в 1 сообщении практически тоже самое.

Добавлено 6 минут спустя:

выбераем в селекте blok3 и выбор радио ничего не меняет. Все ОК так и задумано.
выбераем в селекте blok2 и выбор радио показывает и скрывает 2ой блок. Все ОК так и задумано.
возвращаем  в селекте blok3 и выбор радио показывает и скрывает 2ой блок хотя выбор радио ничего не должен менять. вот здесь ФЕЙЛ и кроется :(

Добавлено 8 минут спустя:

#42846 DenDevin:
мне кажется. лучше использовать проверку на уникальное value , написанное латиницей, и не фразой, а одним словом.

в оригенале так и есть. просто постить весь оригинальный скрипт не вижу смысла. там, овер 600 строчек из конструкций типа
    if ($out == 'blok3') {
        $('#blok2').show(300);
    }

Добавлено 3 минуты спустя:

Зы в 1 посте была очепяпятка в коде скрипта, сори, исправил.

Отредактировано: foxss (27.04.2017 20:56, 6 лет назад)
DenDevin
#6 29.04.2017 21:43
Вам нужно узнать, какой if отрабатывает первым при смене селекта, попробуйте сначала в первый иф поставить алерт, потом во второй. Так вы узнаете, где какое событие вызывается при смене селекта.

Добавлено 3 минуты спустя:

Также попррбуйте потавить алерт для проверки в смену радиобокса, чтобы узнать, вызывается ли событие при включении в селекте 3 блока
foxss
#7 01.05.2017 00:23

Короче переписал скрипт...
За одно сократил количество строк в скрипте с овер 600 до 240.
Кому надо, вот рабочий пример https://jsfiddle.net/1suc1fvz/

пункты которые есть в селекте:
показать блок 1 и в нем выбрать показ блока 2
показать только блок 1 (выбор в блоке 1 не влияет на показ блока 2) 
не показывать блоки, но выставить в нужные значения
показать только блок 2 и выставить в нужное значение в блоке 1

Отредактировано: foxss (26.05.2017 04:56, 6 лет назад)