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

如何使用jQuery检测页面弹窗是否显示?新手技术求助

解决弹窗显示/隐藏状态检测的问题

嘿,别担心,我一眼就看出你之前的代码里选择器和方法用错啦~ 咱们一步步来搞定这个问题:

问题出在哪?

你之前写的几个判断都有语法错误:

  • $("#modal large popup"):这个选择器的意思是「找id为modal的元素下面的large标签里的popup标签」,完全不是你要找的同时拥有modal、large、popup类的弹窗元素。
  • $("verifyIdentity"):这是在找名为verifyIdentity的HTML标签,而你的弹窗是id为verifyIdentity,应该用$("#verifyIdentity")(id选择器要加#)。
  • hasClass('.modal large popup is-visible'):hasClass()方法只接受单个类名作为参数,而且类名前面不能加.,你一次性传一堆类肯定没用。

正确的检测方法

你的弹窗是通过is-visible这个类来控制显示/隐藏的,所以直接检测这个类的存在最可靠(比:visible伪类更准确,因为有些元素可能隐藏但仍符合:visible的判断)。

方法1:单次检测弹窗状态

用弹窗的id选择器(最精准,效率最高),然后检查是否有is-visible类:

// 检测弹窗是否处于显示状态
if ($("#verifyIdentity").hasClass("is-visible")) {
  // 这里写弹窗显示时要执行的代码
  alert("弹窗正在显示哦");
} else {
  // 这里写弹窗隐藏时要执行的代码
  alert("弹窗已经关闭啦");
}

方法2:监听弹窗状态变化(自动触发函数)

如果想在弹窗显示或隐藏的瞬间自动执行函数,而不是手动检测,可以用MutationObserver来监听DOM类的变化:

// 获取弹窗元素
const modalElement = document.getElementById("verifyIdentity");

// 创建观察者,监听类属性变化
const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    // 只关注class属性的变化
    if (mutation.attributeName === "class") {
      const isVisible = modalElement.classList.contains("is-visible");
      if (isVisible) {
        // 弹窗刚显示时执行
        console.log("弹窗打开了!");
      } else {
        // 弹窗刚关闭时执行
        console.log("弹窗关闭了!");
      }
    }
  });
});

// 开始监听弹窗的class属性变化
observer.observe(modalElement, { attributes: true });

这样不管用户是点击按钮关闭弹窗,还是通过其他方式切换弹窗状态,你的函数都会自动触发啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:56:43