图片加载完成后移除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")存在两个关键问题:
this.id返回的是元素的ID字符串,字符串对象没有removeClass方法,必须获取到DOM元素本身才能操作类名。- 如果未定义
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
相关产品推荐
相关产品推荐

