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

如何等待document和window的readyState变为Complete后执行JS代码

实现方案

你当前将JS文件放在head标签内引入,代码执行时DOM还未渲染完成,无法获取到按钮元素,因此绑定事件会失败,以下是满足需求的实现逻辑:

方式1:严格等待window和document就绪后执行

所有逻辑写在setUp.js中即可,无需修改原有HTML代码:

// 校验就绪状态
function checkReadyState() {
  // 只有document和window的readyState都为complete,即DOM、CSS、图片等所有页面资源全部加载完成后才执行绑定逻辑
  if (document.readyState === 'complete' && window.document.readyState === 'complete') {
    bindButtonEvent();
  } else {
    // 未就绪则监听状态变化事件,触发后重新校验
    document.addEventListener('readystatechange', checkReadyState);
    window.addEventListener('load', checkReadyState);
  }
}

// 按钮事件绑定逻辑
function bindButtonEvent() {
  const testBtn = document.getElementById('test');
  if (testBtn) {
    testBtn.addEventListener('click', () => {
      console.log('button clicked');
    });
  }
}

// 初始化执行校验
checkReadyState();

方式2:简化实现

如果不需要等待图片等非DOM资源加载完成,仅需等DOM解析完成即可绑定事件,可以直接修改HTML中JS引入的代码,给script标签添加defer属性:

<script src="scripts/setUp/setUp.js" defer></script>

此时setUp.js可以直接写绑定逻辑,无需额外监听就绪状态:

const testBtn = document.getElementById('test');
testBtn.addEventListener('click', () => {
  console.log('button clicked');
});

两种方案都可以实现点击test按钮后,控制台输出button clicked的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:54:01