javascript - 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>
出于某种原因,当为“I enden av tauet”选择的选项为“Ingenting”(其值为 0)时,rope_price 会乘以 10 或与 0 连接。当我将选择的选项更改为任何其他选项时,rope_price 将乘以 1000 或与 00 连接。我不知道为什么会这样。有任何想法吗?
解决方案
因为您正在连接字符串。与 不同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
变量是 line 中的字符串var rope_price = (length*vprice) + ene_enden;
。当您将两个字符串相乘时,它们会自动转换为数字(您的(length*vprice)
),但是当您将该数字连接到另一个字符串时,它们会再次自动转换为字符串(您的+ ene_enden
),因此您必须先转换ene_enden
为数字,否则更好将所有预期的数字变量转换为数字。
推荐阅读
- r - 选择大量列来重新编码变量值
- c++ - virtual 关键字会影响基类方法的性能吗?
- excel - 来自多个工作表的 VBA 索引/匹配
- python - 检查数组中的 n 个元素是否在增加
- javascript - 未捕获的 TypeError:无法设置 null 错误的属性“innerHTML”,但元素不为 null
- python - 限制我的 HTML 页面中的用户表单输入,直到我的 Python 函数完成运行,Flask
- sql - 将相关表中的值转换为逗号分隔的列表
- c - 用于数组初始化的 C 宏
- pandas - 如何从 Pandas 数据框中获取一组值?
- javascript - Javascript-如何在另一个函数内使用 push 方法将字符串推送到对象内的数组?