arman1231
@arman1231
Keykeeper

Цикл while (Javascript) подвешивает страницу, в чем проблема?

Помогите пожалуйста у меня уже мозг взорвался искать решение.

Исходные данные: Имеем продукт за $100 (цена выводится из базы данных по средствам php) и имеем несколько опций (HTML- Radio input на несколько вариантов) +$10, +$15, +$20.
При выборе одного из radio вариантов к 100 прибавляется допустим 10, но обновляется данная инфа уже только в корзине.
Задача: Сделать динамическое обновление цены после выбора одного из radio переключателей, то есть выбрали вариант +10 и цена сразу стала 110.
Решение:
  1. Подвязываюсь к radio инпуту по средствам события onclick и пишу скрипт
  2. Обращаюсь к html классу "цены" и сохраняю его значение в переменную
  3. Вытягиваю значение выбранного radio варианта в отдельную переменную
  4. Складываю численные значения обеих переменных и записываю в отдельную переменную
  5. Обращаюсь к html классу "цены" и записываю туда новое значение из переменной

Но на деле оказалось, что первый прогон даёт верное значение допустим 100+10=110, однако при повторном клике значение становится 120, то есть уже считается как 110+10=120, что и логично, ведь я не обнулял значение переменной и она так и осталась 110.
Для исправления ситуации я принял решение использовать цикл while и break, что бы была возможность после первого прогона обнулить значение переменной и на повторное нажатие использовать исходное значение, но данный цикл тупо подвешивает всю страницу.

Собственное сам код:
<input price="<?php echo $option_value['price']; ?>" 
                    type="radio" 
                    name="option[<?php echo $option['product_option_id']; ?>]" 
                    value="<?php echo $option_value['product_option_value_id']; ?>"
                    onclick=
                    "
//сохраняем значение исходной цены
                        price1 = $('.spec-price').text();
                        real_price = price1.substring(2);
//сохраняем значение исходной цены

//сохраняем значение выбранного radio                                                       
                        price_select = $(this).attr('price');
                        price_select_new = price_select.substring(2);                    
//сохраняем значение выбранного radio  

//проводим сложение                       
                          new_price = +real_price + +price_select_new;
//проводим сложение  

//сохраняю значение цены  в отдельную переменную
                          real = real_price;
//сохраняю значение цены  в отдельную переменную

//цикл: пока новая цена не равна старой цене, то записываем значение новой цены вместо старой, а когда новая цена становится раной старой цене (которая после первого прогона реально становится равна новой), то прерываем цикл
и обнуляем значение новой цены
                          while(new_price != real ){
                            document.getElementById('span.price-now').innerHTML = '$ ' + new_price;
                            if(new_price==real) break; 
                            new_price=0;
}                                             
                        alert(new_price);
                   "                
                    />


Собственно, где косяк?
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Не надо циклов. У вас есть источник «правды» – исходная цена. Один раз её получите в переменную (а лучше константу). Далее у input'ов слушайте событие не клик, а "change". Один обработчик события на все элементы радио. Получил событие - обновил цену из константной исходной цены и кликнутого элемента.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы