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

点击数据库加载的图片放大时出现TypeError错误求助

动态生成图片点击放大报错的解决方法

问题现象

通过AJAX从数据库拉取数据动态生成图片,点击图片调用enlargeImg函数时触发错误:

Uncaught TypeError: Cannot read properties of undefined (reading 'style')

错误原因

  1. 函数参数未传递:调用enlargeImg()时没有传入图片元素,导致函数内的img参数为undefined,无法访问style属性。
  2. 点击事件绑定错误:点击事件绑定在了包裹图片的<p>标签上,而非图片本身,就算传参也拿不到目标img元素。

修复方案

步骤1:调整点击事件绑定位置

把onclick直接加到<img>标签上,而非外层的<p>。

步骤2:调用函数时传入当前元素

调用enlargeImg(this),将点击的img元素传递给函数。

额外优化:修正标签语法

原代码中<img>标签用了</img>闭合,HTML里img是自闭合标签,改为<img ... />更规范。

修正后的完整代码

loadSynthese函数

function loadSynthese(data) {
$.ajax({
    cache: false,
    url: "data/loadSynthese",
    type: "POST",
    async: true,
    data: ({
        dateid: data,
    }),
    success: function (response, status) {
            response.forEach(element => {
                let css = "";
                let idonglet = element["id_onglet"];
                let idprio = element["id_prio"];
                let texte = element["texte"];
                let image = element["image_aide"];
                
                if(image === '' || image === null || image === undefined){
                    htmlPrio = '<div class="intPrio"><p class="titreP">Priorité ' + k + '' + pilote + '</p><img id="' + idonglet + 'imgCheck' + idprio + '" onclick="selectPrioSynth(' + idonglet + ', ' + idprio + ', this)" ' + css + ' alt="Sélectionner la priorité" data-idprio="' + idprio + '"></div><label class="textPrioSynth" onclick="selectPrioSynth(' + idonglet + ', ' + idprio + ', this)" data-idprio="' + idprio + '">' + texte + '</label>';
                } else {
                    // 把onclick移到img标签上,传入this,修正img闭合语法
                    img = '</br><img id="image'+ idprio + '" class="imageP" src="data:image/jpeg;base64,' + btoa(image) +'" onclick="enlargeImg(this)" />';
                    htmlPrio = '<div class="intPrio"><p class="titreP">Priorité ' + k + '' + pilote + '</p><img id="' + idonglet + 'imgCheck' + idprio + '" onclick="selectPrioSynth(' + idonglet + ', ' + idprio + ', this)" ' + css + ' alt="Sélectionner la priorité" data-idprio="' + idprio + '"></div><label class="textPrioSynth" onclick="selectPrioSynth(' + idonglet + ', ' + idprio + ', this)" data-idprio="' + idprio + '">' + texte + '<p class="imageP">'+img+'</p></label>';
                }
                $("#" + idonglet + "ps").append(htmlPrio);

                ((nextid == idonglet) ? k++ : k = 1);
                j++; i++;
                ((j < response.length - 1) ? nextid = response[i]['id_onglet'] : "");
            });
        }
    },
    error: function (response, status) {
    }
});}

enlargeImg函数

function enlargeImg(img) {
    img.style.width = "60%";
    img.style.height = "auto";
    img.style.transition = "width 0.5s ease";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:45:16