javascript - 选中复选框时,将文本框值乘以 0.9
问题描述
我有一个不可点击的文本框,我用它来保持运行总数(每次单击复选框,它的值都被添加到文本框中)。
然而,我正在努力对这个文本框值做一些乘法。I have a checkbox that, when selected, I would like to multiply by 0.9 (to simulate a 10% discount). 我该怎么做呢?
这是我到目前为止所拥有的(但不工作 - 文本框值刚刚变为 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 似乎有点困惑。您只附加了一个事件处理程序,并试图循环一个不相关的选择器,它只包含一个元素。您还乘以该值,但没有将结果分配给任何东西。
要完成这项工作,您需要将事件处理程序附加到所有单选按钮。然后您可以使用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 指南是一个很好的入门。
推荐阅读
- openseadragon - openseadragon:无法 [Object object]:加载图像时出错
- amazon-web-services - 我应该将 AWS EFS 挂载在公有子网上还是私有子网上?
- java - 为什么我在使用 Spring Security + WebFlux 时对身份验证端点有双重请求
- jenkins - 由于旧的 TFS 工作区导致 Jenkins 作业失败
- elasticsearch - ElasticSearch 按嵌套文档的总和过滤
- ios - iOS - 在 Objective-C 项目上升级 Firebase 产品版本
- c# - Angular 模块不是一个函数 - Highcharts-ng 出现在 .aspx 网络表单上
- javascript - Javascript - 在错误处理情况下抛出不工作
- swift - 无法按我的意愿设计 uicollectionview
- reactjs - 如何根据id设置模态可见?