С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 3

Как правильно реализовать для повторяющихся блоков изменение определенного элемента при выборе radio

20.05.2017, 02:51. Показов 1690. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста с решение одной задачи.

Задача такая:
-- при выборе кол-во товара цена товара должна меняться.



Это я сделал, цена меняется, но работает для всех товаров каталога, если выбрать на одном товаре то меняется и другие.

Вот структура
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div class="product-item">
    <h5><a href="menu-single.html" class="link link-default">Бургер</a></h5>
    <p class="text-italic product-desc">Описание товара</p>
    <div class="variations offset-top-10">
    <input type="radio" id="variat-1" name="Количества" value="4 шт." data-price="100" checked>
    <label for="variat-1">4 шт.</label>
    <input type="radio" id="variat-2" name="Количества" value="8 шт." data-price="189">
    <label for="variat-2">8 шт.</label>
    </div>
    <p class="price">100</p>
    <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-15 thin-icon-cart-add">В корзину</a>
</div>
и вот js код
JavaScript
1
2
3
4
5
6
7
8
9
    $(".product-item").change(function() {
        if ($("input[id='variat-1']").prop("checked")) {
          var price = $('#variat-1').data('price');
            $('.product-item .price').html(price);
        } else if ($("input[id='variat-2']").prop("checked")) {
          var price = $('#variat-2').data('price');
            $('.product-item .price').html(price);
        } 
    });
Чтобы они не менялись, у меня только одна идея дублировать js код и указывать отдельные ID для каждого товара.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div id="product-item1">
    <h5><a href="menu-single.html" class="link link-default">Бургер</a></h5>
    <p class="text-italic product-desc">Описание товара</p>
    <div class="variations offset-top-10">
    <input type="radio" id="variat-1" name="Количества" value="4 шт." data-price="100" checked>
    <label for="variat-1">4 шт.</label>
    <input type="radio" id="variat-2" name="Количества" value="8 шт." data-price="189">
    <label for="variat-2">8 шт.</label>
    </div>
    <p class="price">100</p>
    <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-15 thin-icon-cart-add">В корзину</a>
</div>
<div id="product-item2">
    <h5><a href="menu-single.html" class="link link-default">Бургер</a></h5>
    <p class="text-italic product-desc">Описание товара</p>
    <div class="variations offset-top-10">
    <input type="radio" id="variat-1" name="Количества" value="4 шт." data-price="100" checked>
    <label for="variat-1">4 шт.</label>
    <input type="radio" id="variat-2" name="Количества" value="8 шт." data-price="189">
    <label for="variat-2">8 шт.</label>
    </div>
    <p class="price">100</p>
    <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-15 thin-icon-cart-add">В корзину</a>
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  // Первый товар
    $("#product-item1").change(function() {
        if ($("input[id='variat-1']").prop("checked")) {
          var price = $('#variat-1').data('price');
            $('.product-item .price').html(price);
        } else if ($("input[id='variat-2']").prop("checked")) {
          var price = $('#variat-2').data('price');
            $('.product-item .price').html(price);
        } 
    });
  // Второй товар
 $("#product-item2").change(function() {
        if ($("input[id='variat-1']").prop("checked")) {
          var price = $('#variat-1').data('price');
            $('.product-item .price').html(price);
        } else if ($("input[id='variat-2']").prop("checked")) {
          var price = $('#variat-2').data('price');
            $('.product-item .price').html(price);
        } 
    });
Я знаю что можно не повторять код для каждого товара НО не знаю как это реализовать, помогите пожалуйста... заранее Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2017, 02:51
Ответы с готовыми решениями:

Переключение radio при выборе определенного option
Здравствуйте. Не получилось найти такой пример. Задача состоит в том, что при выборе определенного option в select, переключался...

Как сменить класс элемента или его id при выборе определенного select
Здравствуйте, в мучительных поисках искал ответ на этот вопрос, но в итоге не нашел его, поэтому решил обратиться сюда. Говорю сразу,...

Изменение формы при выборе определенного параметра
Есть форма надо чтоб поля формы прятались при выборе определенного праметра селект Нашол такой вот скрипт &lt;script language...

5
 Аватар для rodigy
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 577
20.05.2017, 17:05
неуникальные id, они не должны повторяться
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
22.05.2017, 08:51
Лучший ответ Сообщение было отмечено Hattam как решение

Решение

Hattam, так как радио переключатели группируются по name, добавлю тэг form для каждой карточки (только ради того, чтобы пример заработал, по уму верстку переделывать надо). Вы ищете элементы с ценами и пр. по всему документу, а надо искать в пределах элемента, на котором сработало событие http://api.jquery.com/find/:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div class="product-item"><form>
  <h5><a href="menu-single.html" class="link link-default">Бургер</a></h5>
  <p class="text-italic product-desc">Описание товара</p>
  <div class="variations offset-top-10">
    <input type="radio" id="variat-1" name="Количества" value="4 шт." data-price="100" checked>
    <label for="variat-1">4 шт.</label>
    <input type="radio" id="variat-2" name="Количества" value="8 шт." data-price="189">
    <label for="variat-2">8 шт.</label>
  </div>
  <p class="price">100</p>
  <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-15 thin-icon-cart-add">В корзину</a>
</form></div>
<div class="product-item"><form>
  <h5><a href="menu-single.html" class="link link-default">Бургер</a></h5>
  <p class="text-italic product-desc">Описание товара</p>
  <div class="variations offset-top-10">
    <input type="radio" id="variat-1" name="Количества" value="4 шт." data-price="200" checked>
    <label for="variat-1">4 шт.</label>
    <input type="radio" id="variat-2" name="Количества" value="8 шт." data-price="289">
    <label for="variat-2">8 шт.</label>
  </div>
  <p class="price">100</p>
  <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-15 thin-icon-cart-add">В корзину</a>
</form></div>
JavaScript
1
2
3
4
5
$(".product-item").change(function() {
  $(this).find('.price').html(
    $(this).find('input[type="radio"]:checked').data('price')
  );
});
Пример
1
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 3
22.05.2017, 09:02  [ТС]
j2FunOnly, Вы абсолютно правы, я совсем забыл про <form>, в итоге сделал так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div data-filter="Category 1" class="col-xs-12 col-sm-6 col-md-4 isotope-item product-item">
  <div class="thumbnail-menu-modern">
    <figure><img src="https://www.cyberforum.ru/images/menu-modern-1-310x260.png" alt="" width="310" height="260" class="img-responsive"/>
    </figure>
    <div class="caption">
      <h5><a href="menu-single.html" class="link link-default">Бургер 1</a></h5>
      <p class="text-italic product-desc">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Esse quibusdam quos a, laboriosam suscipit ad iste omnis cumque provident praesentium numquam ab velit maiores labore incidunt debitis amet libero obcaecati.</p>
      <form action="">
                <div class="variations offset-top-10">
                    <label class="product-label" data-price="120">
                        <input type="radio" name="Количества" value="4 шт." required>
                        <span class="price-value">4 шт.</span>
                    </label>
                    <label class="product-label" data-price="210">
                        <input type="radio" name="Количества" value="8 шт." required>
                        <span class="price-value">8 шт.</span>
                    </label>
                </div>
                <p class="price">120</p>
        <a href="shop-single.html" class="btn btn-shape-circle btn-burnt-sienna offset-top-5 thin-icon-cart-add">В корзину</a>
      </form>
    </div>
  </div>
</div>
JavaScript
1
2
3
4
$('[data-price]').on('click', function () {
  var price = this.dataset.price;
  $(this).parent().parent().find('.price').text(price);
});
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
22.05.2017, 09:16
Цитата Сообщение от Hattam Посмотреть сообщение
JavaScript
1
$(this).parent().parent().find('.price').text(price);
Не делайте так, вдруг изменится верстка - добавите или удалите div мало ли что? Есть же http://api.jquery.com/closest/
JavaScript
1
$(this).closest('form').find('.price').text(price);
1
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 3
22.05.2017, 09:22  [ТС]
j2FunOnly,, хорошо, сделаю тогда так. Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2017, 09:22
Помогаю со студенческими работами здесь

Очистить TextBox при выборе определенного элемента в ComboBox
Есть combobox и 3 textboxа. В combobox через свойства в Items записал 1 2 3. Нужно чтобы при выборе 1 все текстовые поля очищались, а когда...

Данные в TextBox при выборе определённого элемента в ComboBox
Как сделать, что бы в textbox выводилась информация, привязанная к определённому Item в combobox`е.? Ну например первая строка в combobox...

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

Как изменить содержимое формы при выборе след. radio кнопки (см. код)?
Это такой себе небольшой тестик: &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;...

Как при выборе определенного значения, сделать так, чтобы при нажатии на кнопку переходило на соответствующую
Существует 4 формы. На главной форме есть ComboBox и кнопка. В ComboBox 3 значения. Как при выборе определенного значения, сделать так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru