Отображение разных результатов на основе выбора переключателя

#javascript #jquery

#javascript #jquery

Вопрос:

Я использую фрагмент jQuery для создания эффекта, описанного на этом сайте:

http://www.onextrapixel.com/2009/10/13/how-to-display-form-fields-based-on-selection-with-or-without-jquery-cookie/

Что мне нужно, так это иметь возможность отображать другой div на основе выбора переключателя. Я смог успешно реализовать то, что было продемонстрировано на сайте … однако я могу сделать это только для одного выбора. Я полагаю, что повторение кода, скажем, 5 раз, для 5 разных разделов, вероятно, было бы действительно неэффективным.
Чтобы упростить задачу, я, вероятно, назову divs номерами 1-5. Большое спасибо за вашу помощь!

 <fieldset>
<ol class="formset">
    <li><label for="fname1">First Name: </label>
<input type="text" id="fname1" value="" name="fname1"/></li>

    <li><label for="lname1">Last Name: </label>
<input type="text" id="lname1" value="" name="lname1"/></li>

    <li><label for="email1">Email Address: </label><br />
<input type="text" id="email1" value="" name="email1" /></li>

    <li><label for="age1">Are you above 21 yrs old?</label>
<input type="radio" name="age1" value="Yes" class="aboveage1" /> Yes
<input type="radio" name="age1" value="No" class="aboveage1" /> No
<input type="radio" name="age1" value="Maybe" class="aboveage1" /> Maybe
    </li>

</ol>
<ol id="parent1" class="formset">
<li><strong>Parent/Guardian Information:</strong></li>
    <li><label for="pname1">Parent Name: </label>
<input type="text" id="pname1" value="" name="pname1"/></li>
    <li><label for="contact1">Contact No.: </label>
<input type="text" id="contact1" value="" name="contact1"/></li>
</ol>
<input type="submit" name="submit" value="Submit" class="submitbtn" />
</fieldset>
  

Текущий код:

 $(document).ready(function() { 
    $("#parent1").css("display","none");
    $(".aboveage1").click(function() { 
        if ($('input[name=age1]:checked').val() == "No" ) {
            $("#parent1").slideDown("fast"); //Slide Down Effect 
        } 
        else {
            $("#parent1").slideUp("fast"); //Slide Up Effect 
        }
    });
});
  

Комментарии:

1. Какой код у вас есть в настоящее время?

2. $ (документ). готово(функция(){ $(«#parent1»).css(«display»,»none»); $(«.aboveage1″).click(функция(){ if ($(‘ввод [name=age1]:проверено’).val() ==»Нет» ) { $(«#parent1»).slideDown(«быстрый»); // Эффект скольжения вниз } else { $(«#parent1»).slideUp(«быстрый»); //Эффект скольжения вверх } }); });

3. @user791187 — Пожалуйста, отредактируйте свой пост и разместите там любой применимый код, который у вас может быть.

4. Нет проблем — мы все здесь, чтобы учиться! Итак, у вас есть 5 разделов. Будет ли каждый div отображаться / скрываться с помощью другого переключателя? т.е. Div1 отображается / скрывается с помощью Radio1. Div2 отображается / скрыто radio2 и т.д. Или все 5 divs отображаются / скрыты одной радиогруппой с 5 параметрами?

Ответ №1:

Если вы хотите сдвинуть элементы, соответствующие различным ответам на ваш aboveage, и divs имеют тот же идентификатор, что и значения ответов, вы можете сделать следующее:

Примечание: для работы вам придется переименовать ваши div, соответствующие ответам из formset, в sub-formset.

 $(document).ready(function() { 
    $('ol.sub-formset').css("display","none"); // display none on all ol that doesn't have formset class
    $('input[class^="aboveage"]').click(function() { 
        $('ol[class!="formset"]').slideUp("fast"); //Slide Up Effect 
        $('#'   $(this).val()).slideDown("fast"); //Slide Down Effect 
    });
});
  

Рабочий пример: http://jsfiddle.net/L5qfn /

Комментарии:

1. Я пытаюсь изменить только содержимое, которое выпадает. допустим, у меня есть div1, который будет отображать «Да», div2 для «Нет» и div3 для «Возможно». Div2 и div3 останутся закрытыми, пока выбрано значение Yes. Div2 откроется, а Div1 и Div3 останутся закрытыми при выборе «Нет» … и так далее.

2. Хорошо, понял. Я думал, что это что-то вроде этого сайта.

3. отлично, позвольте мне спросить вас об этом: я динамически генерирую оба значения поля, которые соответствуют значению div. Я знаю, что у меня не будет больше, чем, скажем, 20 записей. Я знаю, что отображаемый div будет числом от 1 до 20. Возможно ли сформировать цикл по значениям (1-20) и отобразить соответствующий div?

4. Вы можете, но вам нужно создать способ привязки динамического поля к динамическому div. Допустим, поле со значением No также соответствует div со значением No. Если вы хотите, я могу помочь вам найти решение.

5. Так оно и настроено сейчас … значение радио age1 будет между 1 и 20 … его соответствующий div имеет то же значение. Как тогда будет выглядеть javascript для получения эффекта?