只有当下一个输入大于1时,Jquery才会乘以值

只有当下一个输入大于1时,Jquery才会乘以值,jquery,forms,if-statement,input,numbers,Jquery,Forms,If Statement,Input,Numbers,希望这将是一个相当简单的问题。我还在学习jquery,所以请容忍我,谢谢你的耐心。我找不到答案。 我正在编写一个相当简单的站点,它需要一个表单,它可以处理大量重复的数据,因此通过单个ID进行定位太麻烦了 我试图让它做的是将每个复选框的值(当复选框被选中时)乘以下一个输入-仅-,然后将其添加到表单末尾输入字段中显示的总价中 我让它乘法,但它有一个问题,如果输入字段为空或值为0, 但是,如果我将每个输入的值设置为最小值1,那么它也会将这些输入的所有值发送到服务器,从而导致表单接收非常混乱。(我需要它

希望这将是一个相当简单的问题。我还在学习jquery,所以请容忍我,谢谢你的耐心。我找不到答案。 我正在编写一个相当简单的站点,它需要一个表单,它可以处理大量重复的数据,因此通过单个ID进行定位太麻烦了

我试图让它做的是将每个复选框的值(当复选框被选中时)乘以下一个输入-仅-,然后将其添加到表单末尾输入字段中显示的总价中

我让它乘法,但它有一个问题,如果输入字段为空或值为0, 但是,如果我将每个输入的值设置为最小值1,那么它也会将这些输入的所有值发送到服务器,从而导致表单接收非常混乱。(我需要它是可读的收据,毕竟…)

所以我想,为了防止输入框损坏,我将对其进行编码,以便 -如果输入的值大于1,它将用输入的数字乘以复选框的数字,并将该数字加到总数中 -如果不是,它只是将复选框的值添加到总数中,而不是将任何值相乘。这样,即使他们把输入弄乱,使之为-1,或者总和仍然正确

我试着这样做,但它坏了,我似乎无法让它工作。。。 任何帮助都将不胜感激,任何关于如何到达那里的解释也将不胜感激

这是我的jquery:

$(document).ready(function() {

  $('input:checkbox').change(function() {
    var price = 0;
    $('input:checkbox:checked').each(function() {
      if ((this).next('input').val() > 1) {
        price += $(this).val() * $(this).next("input[name^='qty']").val();
      } else {
        price += parseInt($(this).val());
      }
    });
    $("#price").val(price);
  });
  $('input[type="number"]').change(function() {
    $('input:checkbox').trigger('change');
  });
});
这是相关html的一个示例,每个复选框和输入对都在其自己的div中,如下所示:

 <div class="lineitem"><input type="checkbox" name="SN56803" value="96" /> <input type="number" name="qtySN56803" class="qty" min="-1" max="100"> </div>

此代码有效。对不起,过了一会儿才给你回电话。如果您还有其他问题,请告诉我

HTML

<form action="">
        <div class="lineitem"><input type="checkbox" name="SN56803" value="96" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="22" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="2" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="66" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="45" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="23" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="87" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="68" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <div class="lineitem"><input type="checkbox" name="SN56803" value="5" /> <input type="number" name="qtySN56803" class="qty" min="0" max="100"> </div>
        <label for="">Button Total</label>
        <input type="number" id="btnTotal" disabled>
        <label for="">Greand Total</label>
        <input type="number" id="grandTotal" disabled>
    </form>

如果每个复选框和输入框都位于相应的div下,并且您一次只需要将其相乘,那么您可以尝试这样做,您不需要每次都
每个
,也许这对您有所帮助

$('input:checkbox')。更改(函数(){
var价格=0;
var_next=$(this.next();
如果(_next.val()>1){
price+=$(this.val()*_next.val();
}
否则{
price+=parseInt($(this.val());
}
美元(“#价格”).val(价格);
});
$('input[type=“number”]”)。更改(函数(){
$(this.prev().trigger('change');
});

如果数量为0,会有什么问题?这不应该只是将价格乘以0,而不向总额中添加任何内容吗?
$('input:checkbox')。触发器('change')将触发许多事件。您可能应该使用
input:checkbox:first
或将所有代码移动到一个命名函数中,您可以从两个事件处理程序调用该函数。我还需要查看一些表单。从我的理解来看。表单中有复选框和文本输入字段,一旦有人选中复选框,复选框的值将乘以文本输入中的值,然后添加到表单底部的文本输入中。对吗?再次查看一些HTML会有所帮助。是否需要将所有复选框相乘并在底部框中显示结果?
$(function() {

            var totalSum = [], //store the numbers that will be added together 
                grandSum = 0; // store the grand total

            // Function to be used in the array redue to add the input numbers together
            function sumTotal(val, val2) {
                grandSum = val + val2; // add the numbers from the "totalSum" array
                return val + val2; // return the result from the array reduce method
            }

            // listen to the checkbox change state
            $('input[type="checkbox"]').on('change', function() {
                var inputResult = $(this).val() * $(this).next('input').val(); //multiply the value of the checkbox and the number input

                totalSum.push(inputResult); // push the current input sum into the array to be summed 
                totalSum.reduce(sumTotal);  // sum the numbers in the "totalSum" array using the array reduce method

                $('#btnTotal').val(inputResult);                // show the sum of the two input fields
                $('#grandTotal').val(grandSum || inputResult);  // show the sum of grand total of the numbers 
            });    
        });