Javascript使用each()为复选框返回正确的值
当用户单击复选框并进行一些计算时,我尝试返回一些金额。 但是如果我尝试选中两个复选框,结果总是返回错误的值Javascript使用each()为复选框返回正确的值,javascript,jquery,Javascript,Jquery,当用户单击复选框并进行一些计算时,我尝试返回一些金额。 但是如果我尝试选中两个复选框,结果总是返回错误的值 $('.type_checkbox input[type="checkbox"]').each(function (index) { if ($(this).is(':checked')) { checkbox_price_prefix = $(this).data('prefix-checkbox'); checkbox_pric
$('.type_checkbox input[type="checkbox"]').each(function (index) {
if ($(this).is(':checked')) {
checkbox_price_prefix = $(this).data('prefix-checkbox');
checkbox_price = checkbox_price_prefix + $(this).data('price-checkbox'); // <----- += or =
}
});
$('.type_checkbox input[type=“checkbox”]”)。每个(函数(索引){
如果($(this).is(':checked')){
复选框\价格\前缀=$(this).data('prefix-checkbox');
checkbox_price=checkbox_price_prefix+$(this).data('price-checkbox');//问题是您在每个循环迭代中都覆盖了变量的值
var checkbox_price = 0;
$('.type_checkbox input[type="checkbox"]').each(function (index) {
if ($(this).is(':checked')) {
checkbox_price += parseInt($(this).data('prefix-checkbox') + $(this).data('price-checkbox'),10);
}
});
将变量声明在每个的作用域之外,然后使用选中收件箱的值增加其值,这将是您想要的
通过一些jQuery选择器优化:
var checkbox_price = 0;
$('.type_checkbox input[type="checkbox"]:checked').each(function (index) {
checkbox_price += parseInt($(this).data('prefix-checkbox') + $(this).data('price-checkbox'),10);
});
这里有许多问题:
- 您正在覆盖总值,而不是将它们相加
- 通过连接字符串
-
和20
无法获得值-20
您也不需要在每个循环上选中:选中。只需将其包含在选择器中:
var optionCheckbox = function optionCheckbox() {
var totalAdjustment = 0;
$('.type_checkbox input[type="checkbox"]:checked').each(function () {
var prefix = $(this).data('prefix-checkbox');
var price = $(this).data('price-checkbox');
totalAdjustment += prefix === '-' ? -price : +price;
});
return totalAdjustment ;
};
你的问题在于你的计算功能
total = 100 + parseFloat(option_checkbox_return);
100必须声明为全局变量并初始化为100
var x=100;
var optionCheckbox = function optionCheckbox() {
var checkbox_price_prefix;
var checkbox_price = 0;
// Loop Checkbox
$('.type_checkbox input[type="checkbox"]').each(function (index) {
if ($(this).is(':checked')) {
checkbox_price_prefix = $(this).data('prefix-checkbox');
checkbox_price = checkbox_price_prefix + $(this).data('price-checkbox');
}
});
return checkbox_price;
}
function calculateTotal() {
var option_checkbox_return = optionCheckbox();
total = x + parseFloat(option_checkbox_return);
x=total;
result = parseFloat(Math.round(total * 100) / 100).toFixed(2); // Convert to 2 decimal places
$('.price_placeholder').html('RM' + result);
}
$('.type_checkbox input[type="checkbox"]').on('click', function () {
calculateTotal();
});
您没有合计您的计数-您正在替换它。更改:
checkbox_price = checkbox_price_prefix + $(this).data('price-checkbox');
致:
与问题无关:var optionCheckbox=function optionCheckbox(){
真是太棒了。我用重写的代码写了我的答案。@Regent我编辑了我的答案,它会起作用:)。我添加了js代码,尽管你没有提到x=total;
(这是你想法的重要部分),代码仍然不正确。这里是,表明它工作不正确。您无法通过连接字符串“-”和“20”来获得值-20。那么原始代码中确实存在的parseFloat(“-”+“20”);
呢?
checkbox_price += parseFloat(checkbox_price_prefix + $(this).data('price-checkbox'));