function getTotal(){ var tbody = document.querySelector("tbody"); var tr = tbody.querySelectorAll("tr"); var price = 0; for(var i=0;i<tr.length;i++){ var input = tr[i].querySelector("input"); if(input[0].checked){ price+=parseInt(tr[i].querySelectorAll('td')[2].innerText); } } priceTotal.innerText = price; selectedTotal.innerText =520; }以上代码报错: cannot read propertise of undefined(reading checked),怎么修改
时间: 2024-03-05 15:49:13 浏览: 136
可以尝试将 `input[0]` 改为 `input.checked`,因为 `input` 不是一个数组,是一个 DOM 对象,它没有 `[0]` 这个属性。修改后的代码如下:
```
function getTotal() {
var tbody = document.querySelector("tbody");
var tr = tbody.querySelectorAll("tr");
var price = 0;
for (var i = 0; i < tr.length; i++) {
var input = tr[i].querySelector("input");
if (input.checked) {
price += parseInt(tr[i].querySelectorAll('td')[2].innerText);
}
}
priceTotal.innerText = price;
selectedTotal.innerText = 520;
}
```
这样应该就可以解决这个报错了。
相关问题
function getTotal(){ var carBody = document.getElementById("carBody"); var tr = carBody.getElementsByTagName("tr"); var price = 0; var count = 0; for(var i=0;i<tr.length;i++){ var input = tr[i].getElementsByTagName("input"); if(input[0].checked){ var td2 = tr[i].getElementsByTagName('td')[2].innerText; var numCount = parseInt(input[1].value); tr[i].getElementsByTagName('td')[4].innerText = td2 * numCount; price += parseFloat(tr[i].getElementsByTagName('td')[4].innerText) count += parseInt(input[1].value) } } totalPrice.innerText = price.toFixed(2); totalCount.innerText = count; } 这段代码的意思
这段代码是一个 JavaScript 的函数,它的作用是计算购物车中所有商品的总价和总数量,并将结果显示在页面上。
首先,该函数会获取页面中 id 为 "carBody" 的元素(即购物车表格),然后获取所有的 tr 元素,并循环遍历每一个 tr 元素。
对于每一个 tr 元素,如果该元素内部的复选框被选中(即 input[0]),则会计算该商品的价格 td2 与数量 numCount 的乘积,并将结果显示在该商品的小计中(即 tr[i].getElementsByTagName('td')[4])。同时,该函数会累加所有商品的价格和数量,最后将结果分别显示在页面上。
需要注意的是,该函数中的 totalPrice 和 totalCount 是在页面上事先准备好的元素,用于显示总价和总数量。toFixed(2) 方法用于保留两位小数。
优化以下代码: for (DqExecuteResult dqExecuteResult : dqExecuteResults) { // 一致性 if (RuleTemplateName.MULTI_TABLE_ACCURACY.getCode().equals(dqExecuteResult.getRuleName())) { coherenceTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { coherenceSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ coherenceSuccess += dqExecuteResult.getTotal(); } } // 完备性 else if(RuleTemplateName.NULL_CHECK.getCode().equals(dqExecuteResult.getRuleName())){ completeTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { completeSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ completeSuccess += dqExecuteResult.getTotal(); } } // 有效性 else { effectiveTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { effectiveSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ effectiveSuccess += dqExecuteResult.getTotal(); } } }
可以考虑以下优化:
1. 将重复的代码提取出来,避免重复书写,可以提高代码的可读性和维护性;
2. 可以使用 switch-case 语句替代 if-else if 语句,使代码更加简洁;
3. 可以将常量提取出来,避免在代码中多次出现,提高可维护性。
下面是优化后的代码:
```
final String MULTI_TABLE_ACCURACY = RuleTemplateName.MULTI_TABLE_ACCURACY.getCode();
final String NULL_CHECK = RuleTemplateName.NULL_CHECK.getCode();
for (DqExecuteResult dqExecuteResult : dqExecuteResults) {
String ruleName = dqExecuteResult.getRuleName();
int state = dqExecuteResult.getState();
int total = dqExecuteResult.getTotal();
double statisticsValue = dqExecuteResult.getStatisticsValue();
switch (ruleName) {
case MULTI_TABLE_ACCURACY:
coherenceTotal += total;
coherenceSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
break;
case NULL_CHECK:
completeTotal += total;
completeSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
break;
default:
effectiveTotal += total;
effectiveSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
}
}
```
阅读全文