【问题标题】:jquery- calculate a total value after filling out a checkbox/radio/dropdown formjquery-填写复选框/收音机/下拉表单后计算总值
【发布时间】:2018-02-05 06:36:54
【问题描述】:

我有一个包含三个部分的付款表单。基本上,第一个是带有乘数的“单选”列表,第二个是带有设定值的“复选框”列表,第三个也是带有乘数的下拉列表 ==> (jsfiddle)。为清楚起见,我插入了一个显示总计算值的文本框。

当用户填写此表格时,我如何计算和显示总数?

我尝试使用this堆栈溢出响应,但它根本不起作用。

$('input').change(function(){
    var tot = 1;
    $.each($('input'),function(){
      var curr_val = $(this).val();
        if(curr_val != ""){
          tot = tot * curr_val;
          $('#total').val(tot);
        }
    });
});

【问题讨论】:

  • 你想做什么,你想乘以选定的值还是所有的值??
  • 所有值。因此,如果用户选择“x2”,选择 3 个复选框(每个复选框的值为 4),并选择“3 周”,例如,总数将显示 504 (2x3x4x21)

标签: javascript jquery html forms jquery-selectors


【解决方案1】:

您可以将选择器更改为排除 #total,因为您不想听它的更改 - $(':input').not('#total').change

您可以使用#map() jquery 函数来获取选中 框的数组。

下一步是将它们全部相乘 - 使用#reduce() 函数添加数组。

请看下面的演示:

$(':input').not('#total').change(function() {
  var tot = 1;

  var s1 = +$('input[name=section1]:checked').val();
  var s2 = $('input[name=section2]:checked').map(function() {
    return +$(this).val();
  }).get();
  var s3 = +$('select').val();
  $('#total').val(s1 * (s2.reduce(function(p,c){
    return p + c;
  },0) || 1) * s3);

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="post" action="">
  <div id="section1">Section 1
    <br><input type="radio" name="section1" value="2"> x2
    <br><input type="radio" name="section1" value="1.5"> x1.5
    <br><input type="radio" name="section1" value="1.5"> x1.5
    <br><input type="radio" name="section1" value="1.5"> x1.5
    <br><input type="radio" name="section1" value="1"> x1
    <br><input type="radio" name="section1" value="1"> x1
  </div>
  <br>
  <div id="section2">Section 2
    <br><label><input type="checkbox" name="section2" value="4"><span>1</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>2</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>3</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>4</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>5</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>6</span></label>
    <br><label><input type="checkbox" name="section2" value="4"><span>7</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>8</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>9</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>10</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>11</span></label>
    <label><input type="checkbox" name="section2" value="4"><span>12</span></label>
  </div>
  <br>
  <div>Section 3<br>
    <select>
   <option value="7">1 week</option>
   <option value="14">2 weeks</option>
   <option value="21">3 weeks</option>
   <option value="28">4 weeks</option>
  </select>
  </div>
  <input type="text" value="0" id="total">
</form>

【讨论】:

  • 这行得通,但我刚刚意识到我的问题与第 2 节有关。在第 2 节中,每个复选框的值为 4,但选择更多复选框应该添加 4 而不是乘法。在第 1 部分中选择“x2”,在第 2 部分中选择一个复选框,在第 3 部分中选择“1 周”等于 56(2 x 4 x 7),但选择两个复选框给我 224(因为它在做 2 x 4 x 4 x7),而实际上我想要 112 (2 x (4+4) x 7);选择 3 个复选框应该给我 163,选择 4 个复选框应该给我 224,等等,
  • @Cris 哎呀,错过了第 1 节的 checked 选择器,现在看起来还可以吗? :)
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 2022-01-02
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多