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

JavaScript报错:无法读取undefined的src属性问题求助

问题分析与解决

错误原因

你代码里的shopProducts变量取错了DOM层级:

  • 点击的按钮(.addcart)的直接父元素是<strong class="project-title">,而product-image在<div class="project-card">容器里,这个容器是按钮父元素的祖父元素的父元素(按钮 → strong → project-info → project-card)。
  • 所以在strong元素里调用getElementsByClassName("product-image")会返回空集合,取[0]自然是undefined,访问src就会抛出类型错误。

修正后的代码

JavaScript部分

function addCartClicked(event) {
    var button = event.target;
    // 改用closest找到最近的project-card容器,层级更稳定
    var shopProducts = button.closest('.project-card');
    var title = shopProducts.getElementsByClassName("product-name")[0].innerText;
    var price = shopProducts.getElementsByClassName("price")[0].innerText;
    var productImg = shopProducts.getElementsByClassName("product-image")[0].src;

    console.log(title, price, productImg);
}

补充说明

  • closest('.project-card')会从当前元素开始向上遍历DOM树,找到第一个匹配.project-card选择器的元素,比多次调用parentElement更可靠,后续DOM结构微调也不容易出错。
  • 如果你的浏览器版本较旧(不支持closest),可以改用多次parentElement:
    var shopProducts = button.parentElement.parentElement.parentElement;
    
    不过优先推荐closest,代码可读性和稳定性更好。

验证效果

修改后,shopProducts指向正确的容器,就能正常获取到product-image元素的src属性,控制台会打印出商品名称、价格和图片地址。

内容的提问来源于stack exchange,提问作者Alpha Yns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:31