Layui-Layer 自动关闭了之前的 load弹窗?

Layui-Layer 自动关闭了之前的 load弹窗?

场景

示例页面

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/rx-util@1.6.3/dist/rx-util.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.0/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/layui-layer@1.0.9/dist/layer.js"></script>
    <script>
      const id1 = layer.load()
      const id2 = layer.load()
      layer.close(id2)
    </script>
  </body>
</html>

如题,layer 在关闭 id2 的 load 框时,id1 的 load 框也不见了?!发生了什么?

阅读 3.9k
2 个回答

使用闭包绕过去了,手动计算当前活跃的 load 并在关闭时做判断决定是否需要真的关闭。同时,记录最后一个 load 的 id,当真正需要关闭时,就关闭它就好了!

const load = ((num, lastId) => () => {
        lastId = layer.load(1)
        num++
        return () => {
            num--
            if (num < 0) {
                num = 0
            }
            if (num > 0) {
                return
            }
            layer.close(lastId)
        }
    })(0)

事实上你第二次执行layer.load的时候已经把第一次的load给自动关闭了
因为源码中在create-> type = 3下面加了layer.closeAll('loading');
导致全局只能有一个loading

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题