Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript使用each()为复选框返回正确的值_Javascript_Jquery - Fatal编程技术网

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'));