根据WooCommerce单个产品页面中的尺寸计算价格

Pau*_*dun 5 javascript wordpress jquery dimensions woocommerce

基于在Woocommerce可变产品上的jQuery中获取选定的变化价格答案代码,
在我的代码行中,我对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>
Run Code Online (Sandbox Code Playgroud)

产品页面图片

出于某种原因,当为“我要结束”选择的选项为“正在修改”(其值为0)时,rope_price乘以10或与0串联。当我将选择的选项更改为其他选项时,rope_price将乘以1000或与00串联。我不知道为什么会这样。有任何想法吗?

Jor*_*lez 2

因为你正在连接字符串。与 不同1 + 0"1" + "0"您可以在这里检查:

console.log("1 + 0 =", 1 + 0);
console.log('"1" + "0" =', "1" + "0");
Run Code Online (Sandbox Code Playgroud)

当您从 HTML 对象获取值时,您会收到字符串形式的值。如果您想将其用作数字,则必须先将其转换。您可以使用 或NumberparseFloat甚至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);
Run Code Online (Sandbox Code Playgroud)

您遇到的确切问题是您的ene_enden变量是行中的字符串var rope_price = (length*vprice) + ene_enden;。当您将两个字符串相乘时,它们会自动转换为数字(您的(length*vprice)),但是当您将该数字连接到另一个字符串时,它们会再次自动转换为字符串(您的+ ene_enden),因此您必须首先转换ene_enden为数字,而不是更好将所有预期的数字变量转换为数字。