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

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

20.05.2017, 02:51. Показов 1702. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru