Скрывать и делать необязательной часть формы при выборе вариантов
Сделал форму для выбора варианта доставки, где есть 2 инпута радио. Почта и Курьером.
При выборе варианта Почта, должны появится 2 поля: Город и Отделение. У самовывоза, соответственно 1 поле: Адрес доставки. Проблема: 1) Не могу реализовать, что бы формы скрывались при переключении между чекбоксами. Нашел решение только для одной. 2) Поля форм становились обязательными при выборе конкретного чекбокса. Сейчас либо все обязательны - форма не пропускает, либо все необязательны - тогда и заполнять не нужно. Просветите пожалуйста.
{foreach $deliveries as $delivery}
<div class="checkbox">
<input type="radio" id="deliveries_{$delivery->id}" {if $delivery->id==1} onChange="show()" {else} onChange="hide()">
</div>
<h3> <label for="deliveries_{$delivery->id}">{$delivery->name}</label></h3>
{if $delivery->id==1}
<div id="info">
<input placeholder="Город" type="text" value="{$city|escape}" required/>
<input placeholder="Отделение" type="text" value="{$address|escape}" required />
</div>
{/if}
{if $delivery->id==2}
<div id="info1">
<input placeholder="улица / дом / эт / кв." type="text" value="{$address1|escape}" required />
</div>
{/foreach}
<script>
function show() { document.getElementById('info').style.display='block';}
function hide() { document.getElementById('info').style.display='none';}
</script>
|
Smarty? Цикл дважды это все выведет.
|
Я бы примерно так сделал:
<div class="checkbox">
{foreach $deliveries as $delivery}
<input type="radio" *!*name="delivery_id"*/!* data-id="{$delivery->id}" data-title="{$delivery->name|urlencode}"/>
{/foreach}
</div>
<h3>
<label class="title-label"></label>
</h3>
<div class="fields">
<input placeholder="Город" type="text" value="{$city|escape}" data-delivery="1"/>
<input placeholder="Отделение" type="text" value="{$address|escape}" data-delivery="1"/>
<input placeholder="улица / дом / эт / кв." type="text" value="{$address1|escape}" data-delivery="2"/>
</div>
<script type="text/javascript">
$(function(){
$('.checkbox input[type="radio"]').change(function(){
var $t=$(this),
id=$t.attr('data-id'),
title=decodeURIComponent($t.attr('data-title'));
$('.fields input').each(function(){
var $el=$(this);
if($el.attr('data-delivery')!=id)
$el.hide().removeAttr('required');
else
$el.show().attr('required',true);
});
$('.title-label').text(title);
}).change();
});
</script>
|
Nexus,
а ничего, что у него кнопки не имеют имен, вместо них бесполезный id, а значит не будут зависимой группой? Да и для его верстки не так и сложен код будет:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
$('.checkbox').on('change', 'input', function() {
$('#info-'+this.value).show().find('input').prop('required', 1);
$('#info-'+(this.value^1)).hide().find('input').prop('required', 0);
});
});
</script>
</head>
<body>
<form autocomplete="off">
<div class="checkbox">
<label><input type="radio" name="as" checked="" value="0" /> Почта</label>
<label><input type="radio" name="as" value="1" /> Курьером</label>
</div>
<div id="info-0">
<input placeholder="Город" type="text" value="" required="" />
<input placeholder="Отделение" type="text" value="" required="" />
</div>
<div id="info-1" style="display:none">
<input placeholder="улица / дом / эт / кв." type="text" value="" />
</div>
<button>Send</button>
</form>
</body>
</html>
|
Цитата:
|
Цитата:
|
Цитата:
В итоге форма "подстроится" под последний измененный чекбокс. И да, я таки проморгал отсутствие атрибута) |
| Часовой пояс GMT +3, время: 14:40. |