javascript - 当选中复选框时,将文本框值乘以 0.9

标签 javascript jquery html

我有一个不可点击的文本框,用于保存运行总计(每次单击复选框时,它的值都会添加到文本框中)。

但是,我正在努力对此文本框值进行一些乘法。我有一个复选框,选中该复选框后,我想乘以 0.9(以模拟 10% 的折扣)。我该如何去做呢?

这是我到目前为止所拥有的(但不起作用 - 文本框值只是变为 0.00):

$(document).ready(function($) {
      var sum = 0;
      $('input[id=10percent]').click(function() {
        sum = 0;
        $('input[id=15percent]:checked').each(function() {
        debugger;
          var val = parseFloat($(this).val());
          sum * 0.9;
        });
        $('#sum').val(sum.toFixed(2));
      });
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="runningtotal">
Running CPC Total (in £): <input id='sum' type='text' readonly />
</div>
HTML (for radio boxes):

<div class="agencydiscount">
    <h1>Agency Discount</h1>
    <input type="radio" name="percentdiscount" value="0.00">None<br>
    <input type="radio" name="percentdiscount" id="10percent" value="0.00">10% Discount<br>
    <input type="radio" name="percentdiscount" id="15percent" value="0.00">15% Discount<br>
</div>
jQuery:

jQuery 更新运行总计文本框:

jQuery(document).ready(function($) {
      var sum = 0;
      $('input[type=checkbox]').click(function() {
        sum = 0;
        $('input[type=checkbox]:checked').each(function() {
        debugger;
          var val = parseFloat($(this).val());
          sum += val;
        });
        $('#sum').val(sum.toFixed(2));
      });
    });

最佳答案

你的 JS 看起来有点困惑。您仅附加一个事件处理程序,并尝试循环遍历仅包含单个元素的不相关选择器。您还乘以该值,但不将结果分配给任何内容。

要实现此功能,您需要将事件处理程序附加到所有单选按钮。然后,您可以使用所有 radio 的 value 属性来保存数字,将其乘以 #sum 以获得折扣总额。

另请注意,您需要在某个地方存储原始总数,即。应用任何折扣之前的值,以便始终根据基数进行计算。您可以为此使用data 属性,但请注意,您必须更新该属性以及值。

话虽如此,试试这个:

jQuery(function($) {
  $('input[name="percentdiscount"]').on('change', function() {
    applyDiscount();
  });

  $('input[type=checkbox]').click(function() {
    let sum = 0;        
    $('input[type=checkbox]:checked').each(function() {
      sum += parseFloat($(this).val());
    });
    $('#sum').val(sum.toFixed(2)).data('total', sum);
    applyDiscount();
  });
  
  function applyDiscount() {
    var pc = parseFloat($('input[name="percentdiscount"]:checked').val());
    $('#sum').val(function() {
      return ($(this).data('total') * pc).toFixed(2);
    });
  }
});
label {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<label>
  <input type="checkbox" value="10.00">
  £10.00
</label>
<label>
  <input type="checkbox" value="5.00">
  £5.00
</label>
<label>
  <input type="checkbox" value="19.99">
  £19.99
</label>

<div class="runningtotal">
  Running CPC Total (in £): <input id="sum" type="text" readonly="true" value="0.00" data-total="0" />
</div>

<div class="agencydiscount">
  <h1>Agency Discount</h1>
  <label>
    <input type="radio" name="percentdiscount" value="1" checked>
    None
  </label>
  <label>
    <input type="radio" name="percentdiscount" id="10percent" value="0.9">
    10% Discount
  </label>
  <label>
    <input type="radio" name="percentdiscount" id="15percent" value="0.85">
    15% Discount
  </label>
</div>

顺便说一句,我建议研究一下 JS 的基础知识,因为你需要牢牢掌握一些基本原理。这个MDN guide是一个很好的入门者。

关于javascript - 当选中复选框时,将文本框值乘以 0.9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59981768/

相关文章:

javascript - 如何在HTML加载完成之前调用JS函数?

javascript - 无法将外部 JavaScript 与 Jekyll 链接

javascript - 如何使用 jquery 获取特定 <ul> 中所有可见 <li> 元素的 "title"属性,将主题收集到数组中并使用 alert() 显示它们;

javascript - ajax中js封装函数的返回值

jquery - 过滤从 X 行开始的表格单元格或行

html - 你如何强制 div 在同一行上,即使这意味着它们被推到浏览器的边缘之外?

Javascript 警报数组/对象值

javascript - 使用 JQuery 选择类时获取单独的属性

javascript - HTMLImageElemen.src 在哪里处理 HTMLImageElemen?

html - CSS 布局 101 - 在结构化布局中感到困惑