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

Тема в разделе "JavaScript", создана пользователем Menro, 27 апр 2018.

Статус темы:
Закрыта.
  1. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    660
    Симпатии:
    126
    Добрый вечер коллеги!
    Я вынужден обратиться за помощью, так как мой мозг пока не может справиться с этой задачей, возможно для компетентных мозгов не составит труда помочь!

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

    А именно:

    При выборе количества (в столбце количество) я сделал так, что автоматом подставлялось 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 то записать в инпут это количество.

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


    Надеюсь кто-то поймет мой рассказ!
    Заранее большое спасибо!
     
    Последнее редактирование: 7 май 2018
  2. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    87
    Симпатии:
    62
    Функция 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);//Записываем значение в инпут
    }
    
     
    Menro нравится это.
  3. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    660
    Симпатии:
    126
    Просто великолепно, всё получилось!
    Большое спасибо!
     
    zardoz нравится это.
  4. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    660
    Симпатии:
    126
    Подскажите пожалуйста ещё в одном вопросе!
    Всё этаже карточка, блок количество (справа).

    Есть у меня переменная 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, но как правильно, я не знаю.
     
  5. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    483
    Симпатии:
    323
    Если input действительно соседний, то siblings или next/prev
    Код:
    jQuery('.uni-cpo-option-price').each(function(){
      var $t = jQuery(this);
      $t.append(parseFloat($t.siblings('input').val()) * pricediscounted);
    });
     
    Menro нравится это.
  6. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    660
    Симпатии:
    126
    Решил вообщем, разобравшись с 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)


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

    dejurin Создатель

    Регистр.:
    16 июл 2012
    Сообщения:
    16
    Симпатии:
    12
    (150.35 / 97) * 100 = 155 - забей это в гугл и получить тоже самое 155
    (150.35 / 97) = 1.55
    1.55 * 100 = 155
     
    Menro нравится это.
  8. xxxsoal

    xxxsoal Создатель

    Регистр.:
    15 авг 2016
    Сообщения:
    21
    Симпатии:
    8
    x * 0.97 = 145.50
    x = 145.50 / 0.97 = 150


    x2 = 150.35 / 0.97 = 155
     
    Menro нравится это.
  9. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    660
    Симпатии:
    126
    Спасибо, кто отозвался.
    Да, всё правильно было, просто у меня где-то в другом месте расчет ломался.
    Сейчас столкнулся с такой вот проблемой:

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

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

    Меня это прям очень обламывает.
    Всевозможные округления не помогают, они округляют до 1300 или до 1350 и т.д.
     
  10. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    131
    Симпатии:
    555
    Код:
    var x = 143.455 * 100;
    alert (x.toFixed(2));
    
     
    Menro нравится это.
Статус темы:
Закрыта.