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

图片加载完成后移除img标签blurry-load类的问题排查

问题:图片加载完成后无法移除blurry-load类

我在JSP的Java方法中生成了如下img标签代码:

out.print("<img class=\"blurry-load\"  style=\"margin:0px;border:0px;padding:0px;left:0px;top:0px;\" id=\"" + getId() + "\" " + 
          " onmousedown=\"registraPosicion(event);\"   ondragstart=\"registraPosicion(event);\" ondrag=\"reposiciona(event);\" ondragend='setTimeout(\"registraPosFinal();\",500);' onload='loaded((this.id).removeClass(\"blurry-load\"));'" + 
          "src=\"" + request.getContextPath() + "/imagestore/" + newFileName + 
          "?" + getNode() + "=" + selectId + "&" + "image.index" + "=" + fileIndex + "\" width=\"" + widthSize + 
          "\" height=\"" + heightSize + "\" alt=\"Tamaño " + widthSize + " x " + heightSize + "\">");

其中blurry-load类用于图片加载时的模糊效果,我需要在图片加载完成后移除该类,但当前的onload代码执行后,图片仍保持模糊状态,请问哪里出错了?

注:img标签格式较差是因为由JSP的Java方法生成。
编辑:两种解决方案均生效,我选择了代码量最少的方案,非常感谢!


错误原因与解决方案

核心错误

你写的(this.id).removeClass("blurry-load")存在两个关键问题:

  1. this.id返回的是元素的ID字符串,字符串对象没有removeClass方法,必须获取到DOM元素本身才能操作类名。
  2. 如果未定义loaded函数,这段代码会直接报错,导致移除类的逻辑根本不会执行。

解决方案(按代码量从少到多排序)

方案1:最简原生JS写法

直接在onload里操作当前元素,无需额外函数:
将原代码中的onload部分替换为:

onload='this.classList.remove("blurry-load");'

修改后的完整JSP代码:

out.print("<img class=\"blurry-load\"  style=\"margin:0px;border:0px;padding:0px;left:0px;top:0px;\" id=\"" + getId() + "\" " + 
          " onmousedown=\"registraPosicion(event);\"   ondragstart=\"registraPosicion(event);\" ondrag=\"reposiciona(event);\" ondragend='setTimeout(\"registraPosFinal();\",500);' onload='this.classList.remove(\"blurry-load\");'" + 
          "src=\"" + request.getContextPath() + "/imagestore/" + newFileName + 
          "?" + getNode() + "=" + selectId + "&" + "image.index" + "=" + fileIndex + "\" width=\"" + widthSize + 
          "\" height=\"" + heightSize + "\" alt=\"Tamaño " + widthSize + " x " + heightSize + "\">");

方案2:使用自定义loaded函数(适用于需额外加载逻辑的场景)

如果需要在图片加载完成后执行其他逻辑,可以先在页面中定义loaded函数:

function loaded(imgElement) {
  imgElement.classList.remove("blurry-load");
  // 这里可以添加其他加载完成后的操作
}

然后修改JSP中的onload部分:

onload='loaded(this);'

方案3:jQuery写法(需页面已引入jQuery)

如果项目依赖jQuery,也可以这样写:

onload='$(this).removeClass("blurry-load");'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:18:25