Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Создание сайтов Харьков

Изменение формы при выборе определенного параметра

8 июня 2011 в 23:00 Автор: Nikita_Sp в категории Статьи о JavaScript 8 комментариев

Иногда, при разработке сайта, необходимо учесть некоторые нюансы.

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

В данной статье я хочу показать, каким образом можно это реализовать.

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

<script language ="JavaScript">
<!--
function selChange(seln) {
selNum = seln.beer.selectedIndex;
Isel = seln.beer.options[selNum].text;
alert("Выбрано: "+Isel);
}
//-->
</script> 

<form>
Выберите марку пива:
<select name="beer" onChange="selChange(this.form)">
<option>Жигулевское
<option>Очаковское
<option>Бочкарев
<option>Красный восток
</select>
</form>

В данном примере используется параметр select‘a onChange. С помощью него, мы можем отследить, когда Посетитель выберет параметр из списка. Для нашего случая мы вызываем функцию selChange и передаем в нее текущую форму.

В функции, как мы видим, отслеживается текущее (после выбора) значение элемента с именем beer (в нашем случае это select). Значение (value) записывается в переменную, и потом вызывается алерт с текстом, где фигурирует эта переменная, для вывода выбранного типа.

Давайте теперь рассмотрим, адаптированный под мои нужды, вариант javascript-кода:

<script language ="JavaScript">
<!--
function Change(seln) {
selNum = seln.type.selectedIndex;
Isel = seln.type.options[selNum].text;

if (Isel=="Круглая"){
 $('#kvadr').hide("slow", function() {
 $('#round').show("slow");
 });
}else{
 $('#round').hide("slow", function() {
 $('#kvadr').show("slow");
 });
 }
}
//-->
</script>

У меня, как написано в начале поста, была задача вывода тех или иных полей для заполнения в зависимости от выбранного из выпадающего списка типа товара. Для выполнения моего кода еще необходимо подключить библиотеку jQuery, т.к. я использую в функции такие эффекты, как show и hide.

Все достаточно просто, как и в предыдущем варианте, просто после того как текущее значение записывается в переменную, оно сверяется с текстом и выполняется соответственная часть кода.

Вроде все. Скачать демоchange-form-with-select
Если у вас, мои уважаемые читатели, возникают вопросы — пишите, не стесняйтесь, отвечу в течении суток. Ждать не придется. 😉

8 комментариев

  • Здравствуйте.
    А не подскажите, как реализовать динамическое изменение стоимости в зависимости от выбранных параметров формы.
    То есть есть у нас цена и создать некую переменную, которая равняется (цена+стоимость доставки). А стоимость доставки выбирается в форме, либо радио кнопками, либо в выпадающем меню.
    И чтобы переменная выводилась и динамически менялась в зависимости от выбранного параметра доставки.
    Спасибо.

    • Доброй ночи, Артем!

      1) Для начала необходимо знать место реализации. Т.е. куда непосредственно вы хотите данную функцию включить (движок, самопис).
      2) Использовать лучше наверное Ajax. Если просто хотите «вставить» такую функцию в обычную страницу, то просто создаете подобную примеру конструкцию и в нее добавляете переменную. И при изменении списка, в теле функции просто изменяете значение переменной на нужное, методом суммы или процентовки. При этом потребуется сохранить изначальное значение цены в другой переменной и с ней работать. Т.е. грубо говоря создаем две переменные «цена» и «переменная». «Переменную» выводим, а значение «переменной» берем исходя из «цены»+некий процент или стоимость доставки.

      В противном случае, если не добавлять вспомогательную переменную, при первом изменении цена товара увеличится, а если человек захочет потом выбрать другой способ доставки, то цена будет выглядеть так: «цена»+стоимость первого варианта доставки + стоимость второго варианта доставки. Понимаете о чем я?

      Ну вроде словесно я функцию вам описал.
      Если нужна будет помощь — пишите.

  • Принцип как раз понятен 8)) Сложности возникают именно с реализацией в силу малых знаний в области веб-программирования. Приходится учиться на различных примерах. Где бы вот поглядеть реализацию на конкретных примерах.
    Для списка например — onChange=»selChange(this.form), а для радио кнопок?

  • я понимаю, что не будете. Я имел ввиду, что возможно вы знаете где можно посмотреть. Пример же для данного поста вы откуда то взяли, может и что-то похожее на нужный мне код там можно найти.

    • Спасибо за комментарий, постараюсь удовлетворить потребность в демке в ближайшее время.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вверх!

Меню блога


Warning: Undefined array key "dcw_option_name" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 216

Warning: Undefined array key "dcw_exclude" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 217

Warning: Undefined array key "dcw_depth" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 218

Warning: Undefined array key "use_desc_for_title" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 221

Warning: Undefined array key "sort_order_by" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 222

Warning: Undefined array key "sort_order_as" in /home/nikitasp/nikita-sp.com.ua/www/wp-content/plugins/display-categories-widget/display_categories_widget.php on line 223

Категории блога

Облако тегов