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

为何这段HTML代码导致页面持续加载?如何解决?

问题原因

当<input type="image">加载完Loading.bmp后,会触发onload事件,执行this.src='done.bmp'修改图片源。此时浏览器会重新加载done.bmp,加载完成后又会再次触发onload事件,再次执行修改src的代码,形成无限循环,导致页面一直处于加载状态。

修复方案

方法1:修改src前移除onload事件

在onload函数内先取消自身的事件绑定,避免重复触发:

<input type="image" onload="this.onload=null; this.src='done.bmp'" src="Loading.bmp">

第一次加载完Loading.bmp后,会先移除onload事件,再加载done.bmp,后续不会再触发循环。

方法2:使用一次性事件监听(推荐)

通过JavaScript添加带一次性执行属性的事件监听器,从根源避免循环:

<input type="image" id="loadBtn" src="Loading.bmp">
<script>
const loadBtn = document.getElementById('loadBtn');
loadBtn.addEventListener('load', function() {
  this.src = 'done.bmp';
}, { once: true });
</script>

{ once: true }参数会让事件监听器执行一次后自动移除,不会重复触发。

方法3:改用普通img元素(纯展示场景)

如果不需要<input type="image">的表单提交功能,直接用<img>标签实现状态切换:

<img src="Loading.bmp" onload="this.onload=null; this.src='done.bmp'">

逻辑和方法1一致,更适合仅展示加载状态的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:05