如果一个输入中有相同的类,则多个输入字段的jquery总和

Posted

技术标签:

【中文标题】如果一个输入中有相同的类,则多个输入字段的jquery总和【英文标题】:jquery sum of multiple input fields if same class in one input 【发布时间】:2014-07-30 09:06:25 【问题描述】:

您好,我需要在一个输入中将相同类输入的值与类名总计相加。

<input type="text" class="qty1" value="" />
<input type="text" class="qty1" value="" />
<input type="text" class="qty1" value="" />
<input type="text" class="qty1" value="" />
<input type="text" class="qty1" value="" />
<input type="text" class="qty1" value="" />

<input type="text" class="total" value="" />

可能吗?

A working fiddle here

$(document).on("change", "qty1", function() 
    var sum = 0;
    $("input[class *= 'qty1']").each(function()
        sum += +$(this).val();
    );
    $(".total").val(sum);
);

【问题讨论】:

+1 表示询问可能吗? 那么,这意味着不可能吗?如果我将课程更改为 ID 怎么办? 那么,您发布的这个现有的可能代码不起作用?还是什么?? 意思是小菜一碟。 【参考方案1】:

我建议这个解决方案:

html

<input type="text" class="qty1" value="" />
    <input type="text" class="qty1" value="" />
    <input type="text" class="qty1" value="" />
    <input type="text" class="qty1" value="" />
    <input type="text" class="qty1" value="" />
    <input type="text" class="qty1" value="" />

    <input type="text" class="total" value="" />

<div id="result"></div>

js

$(".qty1").on("blur", function()
    var sum=0;
    $(".qty1").each(function()
        if($(this).val() !== "")
          sum += parseInt($(this).val(), 10);   
    );

    $("#result").html(sum);
);

fiddle

【讨论】:

【参考方案2】:

您几乎拥有它,只需要针对适当的选择器稍微调整一下您的 JQuery

更新小提琴:http://jsfiddle.net/5gsBV/7/

$(document).on("change", ".qty1", function() 
    var sum = 0;
    $(".qty1").each(function()
        sum += +$(this).val();
    );
    $(".total").val(sum);
);

【讨论】:

@Andrei 没问题!每当您想在 JQuery 中访问类或 id 时,您必须确保包含 . or #.class#id 再次感谢,还有一个问题jsfiddle.net/5gsBV/9 如何更改其他事件的“CHANGE”事件,以便即使在页面刷新后它也会对值求和? @Andrei 我不相信该值会保存在页面刷新时的文本字段中。但这应该在 qty 字段发生更改的任何时候处理。 优秀的答案,$("document").on(.....) 也可以捕获动态添加的 HTML,这就是我的情况。 谢谢你,你也可以在我的一个项目中解决我一大早的问题。【参考方案3】:

我认为你的问题在这里:

$("#destination").val(sum);

改成:

$(".total").val(sum);

我建议您使用keyup 而不是change 事件。

$(document).on("keyup"

【讨论】:

【参考方案4】:

你差点就吃完了:

$(document).on("change", ".qty1", function() 
    var sum = 0;
    $(".qty1").each(function()
        sum += +$(this).val();
    );
    $(".total").val(sum);
);

http://jsfiddle.net/DUKL6/1

【讨论】:

Adjit 更快:P 请删除。【参考方案5】:

上述所有答案的问题在于,如果您输入的不是数字,它们就会失败。如果你想要对用户更友好的东西,你应该做一些验证,甚至在输入数字以外的值时给出一些反馈。

$('body').on('change', '.qty1', function() 
    var total=0;
    $(".qty1").each(function()
        quantity = parseInt($(this).val());
        if (!isNaN(quantity)) 
            total += quantity;
        
    );
    $('.total').val('Total: '+total);
);

【讨论】:

【参考方案6】:

我们可以使用以下自己的功能

 (function( $ )
   $.fn.sum=function () 
    var sum=0;
        $(this).each(function(index, element)
            sum += parseFloat($(element).val());
        );
    return sum;
    ; 
)( jQuery );
//Call $('.abcd').sum();

http://www.gleegrid.com/code-snippet/javascript/jquery-sum-input-values-by-class/?filter=bygroup&group=JQuery

【讨论】:

【参考方案7】:

$(document).on("keyup", ".qty1", function() 
    var sum = 0;
    $(".qty1").each(function()
        sum += +$(this).val();
    );
    $(".total").val(sum);
);

【讨论】:

无论何时提出答案,请考虑对您的代码进行注释以提高清晰度。【参考方案8】:
$('.qty1').each(function()
  sum += parseFloat(this.value);
   );
console.log(sum);

【讨论】:

虽然代码对于有经验的人来说可能很容易理解,但初学者可能需要解释。请添加说明您的代码的作用以及它如何解决 OPs 问题。【参考方案9】:

这将适用于纯 js

<input type="text" value=" " class="percent-input"> <br>
<input type="text" value=" " class="percent-input"> <br>
<input type="text" value=" " class="percent-input"> <br>
<p>Total Value :<span id="total">100%</span></p>
<p>Left Value :<span id="left">0.00%</span></p>
    var percenInput = document.querySelectorAll('.percent-input');
    for (let i = 0; i < percenInput.length; i++) 
        percenInput[i].addEventListener('keyup', getPercentVal)
    

    function getPercentVal() 
        var total = 0;
        var allPercentVal = document.querySelectorAll('.percent-input');
        for (var i = 0; i < allPercentVal.length; i++) 
            if (allPercentVal[i].value > 0) 
                var ele = allPercentVal[i];
                total += parseFloat(ele.value);
            
        
        document.getElementById("total").innerHTML = total.toFixed(2) + '%';
        document.getElementById("left").innerHTML = (100 - total).toFixed(2) + '%';
    

【讨论】:

以上是关于如果一个输入中有相同的类,则多个输入字段的jquery总和的主要内容,如果未能解决你的问题,请参考以下文章

如果我在 vue 路由器中有多个带有输入字段的组件,我应该如何获取数据并将其存储在 vuex 中?

如果选中相邻复选框,则输入字段验证

如果表单有超过 200 个输入字段,则自动填充/自动完成不起作用

mapstruct工具包的使用

将数据从一个表单域传递到另一个表单域

为一个属性使用多个输入字段