display: none元素会被document.getElementsByClassName识别到吗

今天登陆项目,发现点击取消按钮则,提示重新登录的提示框讲不会再出现。看对应的代码,发现此处的判断语句是出现该问题的根源。

场景图:

代码:

原因: 这是elementui里面的## MessageBox 弹框组件,当点击取消后,该组件会增加一个display:none 的属性,从而使该元素从页面消失了。 使用

js 复制代码
document.getElementsByClassName('li-message-box__wrapper').length === 0

来做判断条件,想法是通过判断DOM结构中是否有弹窗这个组件。问题就是出现在这里,display:none的元素,仍然会在DOM结构中,只是不在文档流中。文档流是针对css的,和DOM结构是两个东西,不要弄混了。所以document.getElementsByClassName仍然能识别到。这个判断语句是不对的。

本行代码目的是想实现反正弹窗多次重复弹出。 解决方法,通过一个变量,初始化为0,当出现一个重复登录时置为1,操作完置为0

js 复制代码
let messageBoxFlag = 0 // 默认未打开, MessageBox变量控制提示弹窗只弹出一次
service.interceptors.response.use(
  response => {
    console.log(response,'response---');
    let res = response.data
    if (res.code !== 200) {
      if (res.code === 22001031 || res.code === 4104) {

        if (window.location.pathname !== 'login') {
          if (messageBoxFlag === 0) {
            messageBoxFlag = 1 // 修改标记,打开 MessageBox
            MessageBox.confirm('登录失效,请重新登录', '确定登出', {
                confirmButtonText: '重新登录',
                customClass: "delete_style",
                closeOnClickModal: false
            }).then(() => {
                messageBoxFlag = 0  // 修改标记
                store.commit('LOGOUT')
                router.push('/login')
            }).catch(() =>{
                messageBoxFlag = 0  // 修改标记
            })
          }
        } else {
          store.commit('LOGOUT')
          router.push('/login')
        }
      }
    }
    // 
    return response.data
  },
  err => {
    Message.error('请求错误')
    loadingInstance && loadingInstance.close()
  }
)
相关推荐
lfwh3 分钟前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
Ajie'Blog7 分钟前
AI 周报 | Claude Opus 4.8、Copilot Agent 和 Codex 工作流加速
前端·人工智能·gpt·ai·copilot·ai编程
sugar__salt15 分钟前
深入吃透前端线性数据结构:数组、栈、队列、链表核心原理与实战
前端·数据结构·链表
ikoala18 分钟前
Codex 不得不装的 12 个插件,都在这了
前端·javascript·后端
道友可好44 分钟前
用 Linter 驾驭 AI:机械化执行的艺术
前端·人工智能·后端
流浪码农~1 小时前
Element Plus DatePicker 动态设置每周起始日
前端·vue.js·elementui
jason_yang1 小时前
刚发版就背锅?前端版本控制就靠他version-rocket
前端
如果超人不会飞1 小时前
TinyVue NavMenu导航菜单组件使用指南
前端·vue.js
Jason_chen1 小时前
Linux 3.0 串口机制深度解析:传统8250驱动与基础RS-232/485支持
linux·前端
TPBoreas1 小时前
前端面试问题打靶
前端