Javascript jQuery基于表标记求和所有值<;td>;和复选框选择
我有一张发票表,我对是否检查有问题。 如果选中,我希望所有类型的标签数td全部计算,如果未选中,则不计算,但现在,值已计算全部。 例如 如果我检查了设计,没有检查自由度,那么计算结果是10+0,如果我检查了设计和自由度,那么计算结果是10+12Javascript jQuery基于表标记求和所有值<;td>;和复选框选择,javascript,jquery,Javascript,Jquery,我有一张发票表,我对是否检查有问题。 如果选中,我希望所有类型的标签数td全部计算,如果未选中,则不计算,但现在,值已计算全部。 例如 如果我检查了设计,没有检查自由度,那么计算结果是10+0,如果我检查了设计和自由度,那么计算结果是10+12 $('table')。在('mouseup keyup','input[type=number],()=>calculateTotals())上; $('.btn添加行')。在('单击',()=>{ 常量$lastRow=$('.item:last')
$('table')。在('mouseup keyup','input[type=number],()=>calculateTotals())上;
$('.btn添加行')。在('单击',()=>{
常量$lastRow=$('.item:last');
const$newRow=$lastRow.clone();
$newRow.find('input').val('');
$newRow.find('td:last').text('0.00');
$newRow.insertAfter($lastRow);
$newRow.find('input:first').focus();
});
函数calculateTotals(){
常量小计=$('.item').map((idx,val)=>calculateSubtotal(val)).get();
常量合计=小计减少((a,v)=>a+数字(v),0);
元("总计td:等式(1)).文本(格式货币(总计));;
}
函数calculateSubtotal(行){
常量$行=$(行);
常量输入=$row.find('input[type=number]');
常量小计=输入[0]。值+输入[1]。值;
$row.find('td:last').text(格式货币(小计));
返回小计;
}
函数格式币种(金额){
返回`$${Number(amount).toFixed(2)}`;
}
。发票箱{
最大宽度:800px;
保证金:自动;
填充:30px;
边框:1px实心#eee;
盒影:0 10px rgba(0,0,0,15);
字体大小:16px;
线高:24px;
字体系列:“Helvetica Neue”,“Helvetica”,Helvetica,Arial,无衬线;
颜色:#555;
}
.发票箱表{
宽度:100%;
行高:继承;
文本对齐:左对齐;
}
.发票箱表格td{
填充物:5px;
垂直对齐:顶部;
}
.发票箱表tr td:n子项(n+2){
文本对齐:右对齐;
}
.发票箱表格tr.顶部表格td{
垫底:20px;
}
.发票箱表格tr.顶部表格td.标题{
字体大小:45px;
线高:45px;
颜色:#333;
}
.发票箱表tr.信息表td{
填充底部:40px;
}
.发票箱表tr.标题td{
背景:#eee;
边框底部:1px实心#ddd;
字体大小:粗体;
}
.发票箱表tr.详细信息td{
垫底:20px;
}
.发票箱表tr.项目td{
边框底部:1px实心#eee;
}
.发票箱表tr.item.last td{
边框底部:无;
}
.发票箱表tr.项目输入{
左侧填充:5px;
}
.发票箱表tr.项目td:第一个子输入{
左边距:-5px;
宽度:100%;
}
.发票箱表tr.总计td:第n个子项(2){
边框顶部:2个实心#eee;
字体大小:粗体;
}
.发票框输入[类型=编号]{
宽度:60px;
}
@仅介质屏幕和(最大宽度:600px){
.发票箱表格tr.顶部表格td{
宽度:100%;
显示:块;
文本对齐:居中;
}
.发票箱表tr.信息表td{
宽度:100%;
显示:块;
文本对齐:居中;
}
}
/**RTL**/
.rtl{
方向:rtl;
字体系列:Tahoma,'Helvetica Neue','Helvetica',Helvetica,Arial,无衬线;
}
.rtl表格{
文本对齐:右对齐;
}
.rtl表tr td:n子级(2){
文本对齐:左对齐;
}
文件
发票#:123创建日期:2015年1月1日到期日期:2015年2月1日
Sparksuite,Inc.
加利福尼亚州桑尼维尔阳光大道12345号
12345
Acme公司约翰·多伊
john@example.com
付款方式
检查#
检查
1000
项目
单位成本
量
价格
$
设计
$
弗里伦瑟
$300.00
$
编码
$
弗里伦瑟
$75.00
$
设计
$
弗里伦瑟
$10.00
添加行
总额:385.00美元
您遇到的第一个问题是对两个字符串值使用+
运算符,以便将它们连接起来。要执行加法,您需要将它们转换为数值,这种情况下可以使用parseFloat()
来完成
关于仅计算选中值的问题,您可以使用:checkbox:checked
选择器仅检索这些框,然后将它们的值相加。此外,您需要将结果乘以同一行中的“数量”字段。为了方便起见,我在输入中添加了一个.quantity
类
最后,您还需要在页面加载时调用calculateTotals
,以显示当前表单状态的正确总计,以及任何复选框更改时
说了这么多,试试这个:
$(“表”)
.on('input','input[type=“number”]”,()=>calculateTotals()
.on('change',':checkbox',()=>calculateTotals());
计算器();
$('.btn添加行')。在('单击',()=>{
常量$lastRow=$('.item:last');
const$newRow=$lastRow.clone();
$newRow.find('input').val('');
$newRow.fin