Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery基于表标记求和所有值<;td>;和复选框选择_Javascript_Jquery - Fatal编程技术网

Javascript jQuery基于表标记求和所有值<;td>;和复选框选择

Javascript jQuery基于表标记求和所有值<;td>;和复选框选择,javascript,jquery,Javascript,Jquery,我有一张发票表,我对是否检查有问题。 如果选中,我希望所有类型的标签数td全部计算,如果未选中,则不计算,但现在,值已计算全部。 例如 如果我检查了设计,没有检查自由度,那么计算结果是10+0,如果我检查了设计和自由度,那么计算结果是10+12 $('table')。在('mouseup keyup','input[type=number],()=>calculateTotals())上; $('.btn添加行')。在('单击',()=>{ 常量$lastRow=$('.item:last')

我有一张发票表,我对是否检查有问题。 如果选中,我希望所有类型的标签数td全部计算,如果未选中,则不计算,但现在,值已计算全部。 例如 如果我检查了设计,没有检查自由度,那么计算结果是10+0,如果我检查了设计和自由度,那么计算结果是10+12

$('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