Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Выпадающее поле при выборе пункта радио кнопки (https://javascript.ru/forum/dom-window/13921-vypadayushhee-pole-pri-vybore-punkta-radio-knopki.html)

Андрей28 20.12.2010 20:20

Выпадающее поле при выборе пункта радио кнопки
 
Всем привет!

Прошу помочь новичку с таким моментом.
Необходимо сделать, чтобы при выборе одного из пунктов меню, появлялось текстовое поле.

Вот моя конструкция
<table width="536" cellpadding="1">
          <?php foreach ($shipping_methods as $shipping_method) { ?>
          <tr>
            <td colspan="3"><!--<b><?php echo $shipping_method['title']; ?></b>--></td>
          </tr>
          <?php if (!$shipping_method['error']) { ?>
          <?php foreach ($shipping_method['quote'] as $quote) { ?>
          <tr>
            <td width="1"><label for="<?php echo $quote['id']; ?>">
                <?php if ($quote['id'] == $shipping || !$shipping) { ?>
				<?php $shipping = $quote['id']; ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" checked="checked" style="margin: 0px;" />
                <?php } else { ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" style="margin: 0px;" />
                <?php } ?>
              </label></td>
            <td width="534"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['title']; ?></label></td>
            <td width="100" align="right"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['text']; ?></label></td>
          </tr>
          <?php } ?>
          <?php } else { ?>
          <tr>
            <td colspan="3"><div class="error"><?php echo $shipping_method['error']; ?></div></td>
          </tr>
          <?php } ?>
          <?php } ?>
        </table>
        <div style="padding-left:20px">Адрес: <input name="comment" style="width: 200px" value="<?php echo $comment; ?>" /></div>

При этом раскладе у меня поле Адрес постоянно присутствует, а нужно чтобы появлялось только при выборе одного пункта.
Пожалуйста кто знает - подскажите:help:

Vulkan 20.12.2010 20:38

Самый банальный метод:
<table width="536" cellpadding="1">
          <?php foreach ($shipping_methods as $shipping_method) { ?>
          <tr>
            <td colspan="3"><!--<b><?php echo $shipping_method['title']; ?></b>--></td>
          </tr>
          <?php if (!$shipping_method['error']) { ?>
          <?php foreach ($shipping_method['quote'] as $quote) { ?>
          <tr>
            <td width="1"><label for="<?php echo $quote['id']; ?>">
                <?php if ($quote['id'] == $shipping || !$shipping) { ?>
				<?php $shipping = $quote['id']; ?>
                <input type="radio" onclick="document.getElementById('address').style.display='block';" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" checked="checked" style="margin: 0px;" />
                <?php } else { ?>
                <input type="radio" onclick="document.getElementById('address').style.display='block';" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" style="margin: 0px;" />
                <?php } ?>
              </label></td>
            <td width="534"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['title']; ?></label></td>
            <td width="100" align="right"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['text']; ?></label></td>
          </tr>
          <?php } ?>
          <?php } else { ?>
          <tr>
            <td colspan="3"><div class="error"><?php echo $shipping_method['error']; ?></div></td>
          </tr>
          <?php } ?>
          <?php } ?>
        </table>
        <div style="padding-left:20px; display:none;" id="address">Адрес: <input name="comment" style="width: 200px" value="<?php echo $comment; ?>" /></div>

Андрей28 20.12.2010 22:09

Спасибо тебе большое за помощь, Вулкан. Всё отлично работает.
Вот только ещё вопрос.

Поле появляется при нажатии на один из выбранных пунктов.
А как сделать так, чтобы когда переходишь снова на другой пункт, это поле пропадало?

Vulkan 21.12.2010 12:39

Ну как вариант подставить если нужно чтобы при щелчке на пункт поле пропадала добавить ему свойство:
onclick="document.getElementById('address').style.display='none';"

Андрей28 21.12.2010 13:49

Цитата:

Сообщение от Vulkan (Сообщение 84638)
Ну как вариант подставить если нужно чтобы при щелчке на пункт поле пропадала добавить ему свойство:
onclick="document.getElementById('address').style.display='none';"

Попробовал. При нажатии на поле оно действительно пропадает, но тогда нет возможности его заполнить)))
А надо, чтоб при выборе одного пункта радио кнопки оно пропадало, а при выборе другого появлялось. Во как :)

ksa 21.12.2010 13:57

Цитата:

Сообщение от Андрей28
надо, чтоб при выборе одного пункта радио кнопки оно пропадало, а при выборе другого появлялось

Как вариант...

<!DOCTYPE html>
<html>
<head>
<style>
#text {
	display: none;
}
</style>
<script>
function Go() {
	document.getElementById('text').style.display=(document.getElementById('r1').checked)? 'block': 'none'
}
</script>
</head>
<body>
<input type='radio' name='test' id='r1' onclick='Go()' />
</br>
<input type='radio' name='test' id='r2' onclick='Go()' />
<p id='text'>
	Text
</p>
</body>
</html>

Vulkan 21.12.2010 13:58

Ну тут уже можно догадаться, чтобы оно появлялось при нажатии на поле добавляете:
onclick="document.getElementById('address').style.display='block';"

чтобы пропадало
onclick="document.getElementById('address').style.display='none';"

Андрей28 21.12.2010 14:46

Всем спасибо за помощь! Решил пока оставить как есть без выпадания поля. Чёт не выходит.
С наступающим новым годом:)

Vulkan 21.12.2010 15:19

что именно не получается, какая ошибка? Выложите код сюда

ksa 21.12.2010 15:22

Цитата:

Сообщение от Андрей28
Чёт не выходит

Ну ты даёшь... :D

Андрей28 21.12.2010 15:29

Цитата:

Сообщение от Vulkan (Сообщение 84663)
что именно не получается, какая ошибка? Выложите код сюда

Просто всегда сам привык разбираться.
Но в PHP не силён. Только учусь.
Понимаю что вещи простые для знающих..

Делаю интернет-магазин... http://motoproblem.net/
И вот если купить товар и оформлять, то во 2 шаге, когда человек выбирает способ доставки - у меня стоит 2 варианта - самовывоз и доставка по киеву.
И если человек выбирает доставка по киеву, то нужно заполнить поле адрес.
Сейчас оно у меня постоянно активно, а мне хотелось бы чтобы когда человек выбирает самовывоз, то поле адрес не было видно, а когда выбирает доставка по киеву, то оно появлялось.

Просто тут ещё такой момент, что если сделать так как вы советовали в первый раз, то поле появляется при нажатии на второй пункт но не пропадает если опять вернуться на первый, и при этом если перейти на следующий шаг и вернуться обратно, то этого поля тоже не видно.

Насколько понятно объяснил - сложно сказать:)
Но если сделать тестовую покупку, то там сразу станет ясно.

Спасибо что пытаетесь помочь:thanks:

ksa 21.12.2010 15:32

Цитата:

Сообщение от Андрей28
Но в PHP не силён

Таки мой пример на JS онли... :)

Vulkan 21.12.2010 15:48

ну короче у div в котором адрес ставь
style="padding-left:20px; display:none;" и id="address"

у пункта самовывоз ставь
onclick="document.getElementById('address').style.display='none';"

у пункта доставка по киеву ставь
onclick="document.getElementById('address').style.display='block';"

Проверял на твоём сайте, всё работает если так сделать.
На счёт
Цитата:

при этом если перейти на следующий шаг и вернуться обратно, то этого поля тоже не видно
Это уже можно просто перещёлкнуть поле, и этот нюанс уже сам решай или это уже будет не бесплатно

Андрей28 21.12.2010 16:17

Цитата:

Сообщение от Vulkan (Сообщение 84670)
ну короче у div в котором адрес ставь
style="padding-left:20px; display:none;" и id="address"

у пункта самовывоз ставь
onclick="document.getElementById('address').style.display='none';"

у пункта доставка по киеву ставь
onclick="document.getElementById('address').style.display='block';"

Проверял на твоём сайте, всё работает если так сделать.
На счёт
Это уже можно просто перещёлкнуть поле, и этот нюанс уже сам решай или это уже будет не бесплатно

Здесь я понимаю уже.
Вот только у меня вот так код записан (с учётом что выставлять варианты доставок нужно в админке сайта)
<tr>
            <td width="1"><label for="<?php echo $quote['id']; ?>">
                <?php if ($quote['id'] == $shipping || !$shipping) { ?>
				<?php $shipping = $quote['id']; ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" checked="checked" style="margin: 0px;" />
                <?php } else { ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" style="margin: 0px;" />
                <?php } ?>
              </label></td>
            <td width="534"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['title']; ?></label></td>
            <td width="100" align="right"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['text']; ?></label></td>
          </tr>


Как мне обозначить в таком коде где будет самовывоз а где доставка по киеву?

Vulkan 21.12.2010 16:24

<tr>
            <td width="1"><label for="<?php echo $quote['id']; ?>">
                <?php if ($quote['id'] == $shipping || !$shipping) { ?>
				<?php $shipping = $quote['id']; ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" checked="checked" onclick="document.getElementById('address').style.display='none';" style="margin: 0px;" />
                <?php } else { ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" onclick="document.getElementById('address').style.display='block';"  style="margin: 0px;" />
                <?php } ?>
              </label></td>
            <td width="534"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['title']; ?></label></td>
            <td width="100" align="right"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['text']; ?></label></td>
          </tr>

Вот у которого checked=checked, тот и самовывоз, тут я уже онклик проставил как надо, на поле адреса незабудь стиль и ид поставить как я выше прописал.

Андрей28 21.12.2010 16:38

Цитата:

Сообщение от Vulkan (Сообщение 84681)
<tr>
            <td width="1"><label for="<?php echo $quote['id']; ?>">
                <?php if ($quote['id'] == $shipping || !$shipping) { ?>
				<?php $shipping = $quote['id']; ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" checked="checked" onclick="document.getElementById('address').style.display='none';" style="margin: 0px;" />
                <?php } else { ?>
                <input type="radio" name="shipping_method" value="<?php echo $quote['id']; ?>" id="<?php echo $quote['id']; ?>" onclick="document.getElementById('address').style.display='block';"  style="margin: 0px;" />
                <?php } ?>
              </label></td>
            <td width="534"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['title']; ?></label></td>
            <td width="100" align="right"><label for="<?php echo $quote['id']; ?>" style="cursor: pointer;"><?php echo $quote['text']; ?></label></td>
          </tr>

Вот у которого checked=checked, тот и самовывоз, тут я уже онклик проставил как надо, на поле адреса незабудь стиль и ид поставить как я выше прописал.

Спасибо огромное за помощь. Работает как хотел.
Только как и писал если пойти на след.шаг и вернуться обратно, то пункт то уже стоит тот, что мы выбрали - доставка по киеву. И чтобы отредактировать поле адрес нам нужно нажать уже на самовывоз.. не логично выходит.
Сколько мне будет стоить решение этого вопроса?:)

Vulkan 21.12.2010 16:43

Андрей28, обращайтесь в раздел работа на этом сайте, там найдётся тот кто сделает это.

Андрей28 21.12.2010 16:47

Цитата:

Сообщение от Vulkan (Сообщение 84685)
Андрей28, обращайтесь в раздел работа на этом сайте, там найдётся тот кто сделает это.

Ещё раз огромная благодарность за помощь!!!
Хороших праздников:)


Часовой пояс GMT +3, время: 10:36.