Расчет цены на основе измерений на странице одного продукта WooCommerce - PullRequest
5 голосов
/ 13 марта 2019

На основе " Получить выбранную цену варианта в jQuery для продуктов с переменными параметрами Woocommerce " код ответа,
в моем коде ниже, у меня возникла проблема с вычислением ценыПеременный продукт WooCommerce.

Цена умножается на 10 или 1000, в зависимости от варианта, выбранного в раскрывающемся списке, что не должно происходить, и я не знаю, почему это происходит.

Вот мойкод:

<script>
    jQuery(function($) {
        var jsonData = <?php echo json_encode($variations_data); ?>,
            inputVID = 'input.variation_id';

        $('input').change( function(){
            if( '' != $(inputVID).val() ) {
                var vid      = $(inputVID).val(), // VARIATION ID
                    length   = $('#cfwc-title-field').val(), // LENGTH
                    diameter = $('#diameter').val(),  // DIAMETER
                    ene_enden = $('#id_dropdown_one_end').find('option:selected').attr("value_one_end"),
                    vprice   = ''; // Initilizing

                // Loop through variation IDs / Prices pairs
                $.each( jsonData, function( index, price ) {
                    if( index == $(inputVID).val() ) {
                        vprice = price; // The right variation price
                    }
                });
                var rope_price = (length*vprice) + ene_enden;
                if (rope_price != 0){
                    $('.price').html(rope_price+',-');
                }

                alert('variation Id: '+vid+' || Lengde: '+length+' || Diameter: '+diameter+' || Variantpris: '+vprice+ ' || Rope price: '+rope_price+' || ene_enden = '+ene_enden);

            }
        });
    });
</script>

Picture of product page

По какой-то причине канатная дорога умножается на 10 или объединяется с 0, если выбрана опция 'I enden av tauet''Ingenting' (значение равно 0).Когда я изменяю выбранную опцию на любую из остальных, значение_интерприса умножается на 1000 или объединяется с 00. Я не знаю, почему это происходит.Есть идеи?

1 Ответ

2 голосов
/ 13 марта 2019

Потому что вы объединяете строки.Не совпадает 1 + 0 с "1" + "0", как вы можете проверить здесь:

console.log("1 + 0 =", 1 + 0);
console.log('"1" + "0" =', "1" + "0");

Когда вы получаете значение из объекта HTML, вы получаете его в виде строки.Если вы хотите использовать его как число, вы должны конвертировать его раньше.Вы можете использовать Number или parseFloat (даже parseInt, но удалит десятичные дроби).

var oneNumber = 1;
var oneString = "1";
var oneConverted = Number(oneString);

console.log("typeof oneNumber:", typeof oneNumber);
console.log("typeof oneString:", typeof oneString);
console.log("typeof oneConverted:", typeof oneConverted);

console.log("oneNumber + oneNumber =", oneNumber + oneNumber);
console.log('oneString + oneString =', oneString + oneString);
console.log('oneConverted + oneConverted =', oneConverted + oneConverted);

Точная проблема, с которой вы столкнулись, заключается в том, что ваша переменная ene_enden представляет собой строку в строке var rope_price = (length*vprice) + ene_enden;.Когда вы умножаете две строки, они автоматически преобразуются в число (ваш (length*vprice)), но когда вы объединяете это число с другой строкой, они снова автоматически преобразуются в строку (ваш + ene_enden), поэтому вы должны сначала преобразоватьene_enden в число, лучше не преобразовывать все ожидаемые числовые переменные в число.

...