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

动态修改HTML元素属性失败:页面加载未更新内容求助

问题排查与修复

1. 数据函数直接返回undefined

你的products()函数里,return后面直接换行了,JS会自动在return后加个分号,导致函数根本返回不了你定义的数组,只会返回undefined。

改完的data.js:

export function products() {
    return [
        {
            "id": "1001",
            "name": "MG RX-78-2 3.0",
            "scale": "1/100",
            "comp": "Bandai",
            "price": "1,350,000 đ",
            "type": "MG",
            "status": 1,
            "poster": "https://cdn.shopify.com/s/files/1/2786/5582/products/mg-rx-78-2-gundam-ver-3-0-pa_1.jpg?v=1660244450"
        }
    ];
}

2. 生成函数写了但没执行

你在页面就绪的回调里定义了products_gen函数,但没调用它,页面加载时自然不会触发替换逻辑,必须手动调用一次。

3. 数组length是属性不是方法

代码里写的product_list.length()是错的,数组长度是属性,直接写product_list.length就行。

4. 产品数量不够会卡死循环

现在只有1个产品,但你要循环生成8个不同项,这会导致无限循环——唯一的产品被选中后,后面随机出来的索引永远是它,满足不了未选中的条件,i永远涨不到8。要么限制生成数量不超过现有产品数,要么允许重复展示。

修复后的main.js(先按现有1个产品处理,后续加产品后自动适配):

import { products } from "./data.js";
(function ($) {
    "use strict";
    $(document).ready(function () {
        function products_gen() {
            let product_list = products();
            // 最多展示现有产品数,避免死循环
            const maxItems = Math.min(8, product_list.length);
            let check = new Array(product_list.length).fill(false);
            
            for(let i = 0; i < maxItems; ){
                let rando = Math.floor(Math.random() * product_list.length);
                if(!check[rando]){
                    check[rando] = true;
                    // 注意:如果要生成多个产品卡片,不能一直用同一个id,得按索引拼接id,比如products_${i+1}_poster
                    // 这里先处理第一个产品项的情况
                    document.getElementById("products_1_poster").src = product_list[rando].poster;
                    document.getElementById("products_1_name").innerHTML = product_list[rando].name;
                    document.getElementById("products_1_price").innerHTML = product_list[rando].price;
                    i++;
                }
            }
        }
        // 调用生成函数,页面加载时执行
        products_gen();
    });   
})(jQuery);

额外提醒:如果要生成多个不同的产品卡片,别一直给同一个id赋值,得根据循环索引动态匹配对应的DOM元素,比如把元素id设成products_1_poster、products_2_poster这类,循环时用i来拼接id,不然所有循环都会覆盖同一个元素的内容。

内容的提问来源于stack exchange,提问作者Dung Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:12:53