From b3bfc923744191fef52a32a8be88210f5c98689d Mon Sep 17 00:00:00 2001 From: morning-star <26325820+Sight-wcg@users.noreply.github.com> Date: Mon, 21 Apr 2025 00:22:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(layui):=20=E4=BF=AE=E5=A4=8D=20layui.link?= =?UTF-8?q?=20=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=9B=9E=E8=B0=83=E5=87=BD=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#2651)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(layui.js): 修复 layui.link 重复执行时回调不触发的问题 这会导致 laydate 无法渲染,行为和 2.9 保持一致 * chore(link): 修改注释错别字 * chore(link): 添加注释 --------- Co-authored-by: 贤心 <3277200+sentsim@users.noreply.github.com> --- src/layui.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/layui.js b/src/layui.js index bf96445f..7bff2634 100644 --- a/src/layui.js +++ b/src/layui.js @@ -421,7 +421,7 @@ Class.prototype.link = function(href, callback, id) { var that = this; var head = document.getElementsByTagName('head')[0]; - var link = document.createElement('link'); + var hasCallback = typeof callback === 'function'; // 若第二个参数为 string 类型,则该参数为 id if (typeof callback === 'string') { @@ -440,26 +440,31 @@ }); } - // 若为传入 id ,则取路径 `//` 后面的字符拼接为 id,不含.与参数 + // 若未传入 id ,则取路径 `//` 后面的字符拼接为 id,不含.与参数 id = id || href.replace(/^(#|(http(s?)):\/\/|\/\/)|\.|\/|\?.+/g, ''); id = 'layuicss-'+ id; - link.href = href + (config.debug ? '?v='+new Date().getTime() : ''); - link.rel = 'stylesheet'; - link.id = id; + var link = document.getElementById(id); - // 插入节点 - if (!document.getElementById(id)) { + // 初始创建节点 + if (!link) { + link = document.createElement('link'); + link.href = href + (config.debug ? '?v='+new Date().getTime() : ''); + link.rel = 'stylesheet'; + link.id = id; head.appendChild(link); } - // 是否执行回调 - if (typeof callback !== 'function') { + // 若加载已完成,则直接执行回调函数 + if (link.__lay_readyState__ === 'complete') { + hasCallback && callback(link); return that; } + // 初始加载 onNodeLoad(link, function() { - callback(link); + link.__lay_readyState__ = 'complete'; + hasCallback && callback(link); }, function() { error(href + ' load error', 'error'); head.removeChild(link); // 移除节点