You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:21:04