JavaScript购物车项目报Cannot read property 'value' of undefined错误求助
问题原因
- 类名选择器使用错误:
getElementsByClassName方法仅接收纯类名作为参数,你代码中写的'cart-quantity.input'是CSS选择器的组合写法,不符合该方法的入参规则,导致无法匹配到对应的数量输入元素,quantityElement最终返回undefined,访问其value属性时就触发了报错。 value属性调用错误:原生DOM输入元素的value是可读可写的属性,不是方法,不需要加括号执行,你写的quantityElement.value()属于语法错误。
解决方案
先根据你的页面结构调整数量元素的选择逻辑:
如果你的数量输入框本身的类名是cart-quantity,直接把选择器改为'cart-quantity'即可;如果是类名为cart-quantity的容器包裹了input输入框,就先选中容器再获取内部的input元素。
同时把value()的括号去掉,额外可以加上总价保留两位小数的处理,避免出现多位小数的展示问题。
修正后的完整updateCartTotal函数代码如下:
function updateCartTotal() { var cartItemContainer = document.getElementsByClassName('cart-items')[0] var cartRows = cartItemContainer.getElementsByClassName('cart-row') var total = 0 for (var i = 0; i < cartRows.length; i++) { var cartRow = cartRows[i] var priceElement = cartRow.getElementsByClassName('cart-price')[0]; // 此处根据你的实际结构二选一: // 情况1:input本身类为cart-quantity var quantityElement = cartRow.getElementsByClassName('cart-quantity')[0] // 情况2:cart-quantity类容器下的input,用下面这行替换上面的 // var quantityElement = cartRow.getElementsByClassName('cart-quantity')[0].getElementsByTagName('input')[0] var price = parseFloat(priceElement.innerText.replace('$', '')) // value是属性,去掉括号 var quantity = quantityElement.value total = total + (price * quantity) } // 保留两位小数处理 document.getElementsByClassName('cart-total-price')[0].innerText = '$' + total.toFixed(2) }
内容的提问来源于stack exchange,提问作者WooxHimself
相关产品推荐
相关产品推荐

