jQuery中已弃用的$.holdReady(hold)替代方案咨询
替代已弃用的
$.holdReady的方案 你原来的代码逻辑是通过暂停jQuery的ready事件,等待配置脚本econfig加载完成后再恢复事件触发,以此保证DOM就绪和配置加载完成后才执行后续业务代码。针对$.holdReady被弃用的情况,有两种简洁的替代方案:
方案一:使用原生JavaScript(无jQuery依赖)
直接通过Promise管理DOM就绪和脚本加载的异步流程,代码更轻量化:
async function initApp() { // 等待DOM加载完成 await new Promise(resolve => { if (document.readyState === "complete" || document.readyState === "interactive") { resolve(); } else { document.addEventListener("DOMContentLoaded", resolve); } }); // 加载配置脚本 await new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = "econfig"; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); // 此处编写原$(document).ready内的业务逻辑 console.log("DOM就绪且配置加载完成,开始执行逻辑"); } // 初始化并捕获错误 initApp().catch(err => console.error("初始化失败:", err));
方案二:基于jQuery的替代写法
如果项目仍依赖jQuery,可以用$.when同时等待DOM就绪和脚本加载完成:
$.when( $(document).ready(), // 等待DOM就绪 $.getScript("econfig") // 加载配置脚本 ).done(function() { // 业务逻辑写在这里,确保DOM和配置都已就绪 }).fail(function(error) { console.error("加载失败:", error); });
这两种方案都能实现原代码的核心需求,且符合现代异步代码的规范,避免使用已弃用的API。
内容的提问来源于stack exchange,提问作者navi
相关产品推荐
相关产品推荐

