Нужна помощь JavaScript - правки скрипта расчета стоимость

Статус
В этой теме нельзя размещать новые ответы.

Menro

web, seo, email, hack
Регистрация
27 Янв 2008
Сообщения
689
Реакции
138
Добрый вечер коллеги!
Я вынужден обратиться за помощью, так как мой мозг пока не может справиться с этой задачей, возможно для компетентных мозгов не составит труда помочь!

Есть карточка товара, там происходит расчет цены.
Всё реализовано за меня, мне лишь осталось внести корректив, который что-то никак не получается

А именно:

При выборе количества (в столбце количество) я сделал так, что автоматом подставлялось value в инпут количество (поле количество). То есть выбрал 1, в поле количество записалось 1 и пересчиталось, всё работает просто прекрасно, но проблема появляется когда я хочу указать своё произвольное количество, например 2, он пересчитывает и снова указывает 1.

Функкция uni_cpo_form_processing() вызывается как я понял каждый раз при изменении количества в поле, а в начале этой функции я записываю нужный мне value в инпут.

PHP:
//Получаем значение количества из блока количества
                $valueqty = jQuery('#uni_cpo_option_qyt input:radio:checked').val();
//Записываем значение в инпут
                jQuery('input[name=quantity]').val($valueqty);
   //Ну а здесь уже что-то вроде расчета, то есть нужно до этого момента записать верное число в инпут
                $prodQtyInput = $elAddToCartForm.find('.input-text.qty'),
                prodQty = ( $prodQtyInput.val() ) ? $prodQtyInput.val() : 1,

Не пойму как сделать какое-то условие, что мол если количество в инпуте отличается от количества выбранного radio то записать в инпут это количество.

Здесь весь скрипт:


Надеюсь кто-то поймет мой рассказ!
Заранее большое спасибо!
 
Последнее редактирование:
Функция uni_cpo_form_processing срабатывает каждый раз при изменении значения 'change' event на любом элементе.
Нужно внутри нее фильтровать события от поля где вводятся числа от других(радиокнопок).
Код:
if(jQuery(event.target).attr('type')==='number'){
   jQuery('#uni_cpo_option_qyt input:radio:checked').prop('checked', false); // сбрасываем все радио
   // число уже введено
} else{
  $valueqty = jQuery('#uni_cpo_option_qyt input:radio:checked').val(); //Получаем значение количества из блока количества
  jQuery('input[name=quantity]').val($valueqty);//Записываем значение в инпут
}
 
Функция uni_cpo_form_processing срабатывает каждый раз при изменении значения 'change' event на любом элементе.
Нужно внутри нее фильтровать события от поля где вводятся числа от других(радиокнопок).
Код:
if(jQuery(event.target).attr('type')==='number'){
   jQuery('#uni_cpo_option_qyt input:radio:checked').prop('checked', false); // сбрасываем все радио
   // число уже введено
} else{
  $valueqty = jQuery('#uni_cpo_option_qyt input:radio:checked').val(); //Получаем значение количества из блока количества
  jQuery('input[name=quantity]').val($valueqty);//Записываем значение в инпут
}
Просто великолепно, всё получилось!
Большое спасибо!
 
Подскажите пожалуйста ещё в одном вопросе!
Всё этаже карточка, блок количество (справа).

Есть у меня переменная pricediscounted, которая содержит в себе число.
Мне необходимо добавить это число к каждому элементу <span class="uni-cpo-option-price">, но всё усложняет то, что число не просто нужно добавить, а умножить его на value соседнего инпута (который лежит на ним).

PHP:
var inputprice = jQuery(".uni_cpo_option_qyt-field").val()
            jQuery('.uni-cpo-option-price').append(pricediscounted*inputprice);

Здесь я получаю значение инпута, затем умножаю его на value, но проблема в том, что таких дивов много, а value везде свой, при этом id нет. То есть нужно как я понимаю использовать $this, но как правильно, я не знаю.
 
всё усложняет то, что число не просто нужно добавить, а умножить его на value соседнего инпута (который лежит на ним).
.
Если input действительно соседний, то siblings или next/prev
Код:
jQuery('.uni-cpo-option-price').each(function(){
  var $t = jQuery(this);
  $t.append(parseFloat($t.siblings('input').val()) * pricediscounted);
});
 
Решил вообщем, разобравшись с jQuery(this);
Люди, последнее сообщение, просто очень плохо с математикой, никак не соображу.

Смотрите:

Товар = 150.00 руб.
Товар со скидкой 3% = 145.50 руб.


Я знаю, что 145.50 - это 97% от окончательной стоимости товара, но не знаю стоимость товара, то есть 100%.
Стоимость товара постоянно меняется в зависимости от параметров, по-этому мне надо путем математических операция с ценой 145.50 получить 150.00 ровно.

Я пробую так:

(145.50 / 97) * 100 = 150.00
И вроде бы отлично, но нет.

Товар = 155.00
Товар со скидкой 3% = 150.35
(150.35 / 97) * 100 = 165.21 (а должно быть 155.00)


Короче помогите понять!
 
(150.35 / 97) * 100 = 155 - забей это в гугл и получить тоже самое 155
(150.35 / 97) = 1.55
1.55 * 100 = 155
 
Решил вообщем, разобравшись с jQuery(this);
Люди, последнее сообщение, просто очень плохо с математикой, никак не соображу.

Смотрите:

Товар = 150.00 руб.
Товар со скидкой 3% = 145.50 руб.


Я знаю, что 145.50 - это 97% от окончательной стоимости товара, но не знаю стоимость товара, то есть 100%.
Стоимость товара постоянно меняется в зависимости от параметров, по-этому мне надо путем математических операция с ценой 145.50 получить 150.00 ровно.

Я пробую так:

(145.50 / 97) * 100 = 150.00
И вроде бы отлично, но нет.

Товар = 155.00
Товар со скидкой 3% = 150.35
(150.35 / 97) * 100 = 165.21 (а должно быть 155.00)


Короче помогите понять!

x * 0.97 = 145.50
x = 145.50 / 0.97 = 150


x2 = 150.35 / 0.97 = 155
 
Спасибо, кто отозвался.
Да, всё правильно было, просто у меня где-то в другом месте расчет ломался.
Сейчас столкнулся с такой вот проблемой:

143,45 x 100 = 14 345 (это в обычной жизни)

143,45 x 100 = 14344.999999999998
а вот так у меня получается в JS.

Меня это прям очень обламывает.
Всевозможные округления не помогают, они округляют до 1300 или до 1350 и т.д.
 
Код:
var x = 143.455 * 100;
alert (x.toFixed(2));
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху