#javascript #jquery
#javascript #jquery
Вопрос:
Я использую фрагмент jQuery для создания эффекта, описанного на этом сайте:
Что мне нужно, так это иметь возможность отображать другой 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 для получения эффекта?