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

如何解决两个JavaScript函数冲突,实现弹窗的条件化显示逻辑?

我明白你的问题了——现在的问题出在两个独立的逻辑互相冲突:第二个检查pageTitle的代码不管Cookie是否存在,都会强制给body加上show-alert类,直接覆盖了第一个逻辑的结果。咱们把这两个条件整合到同一个判断里,就能实现你想要的效果:只有当Cookie不存在,且页面标题包含"Test"时,才显示弹窗。

问题根源拆解

你原来的代码是两个独立执行的块:

  1. 页面加载时检查Cookie,决定是否隐藏弹窗
  2. 单独检查pageTitle,只要是Test页面就强制显示弹窗

这就导致哪怕Cookie已经存在(用户已经关闭过弹窗),第二个逻辑还是会触发弹窗显示,完全忽略了Cookie的状态。

修复后的完整代码

把两个条件合并到页面加载的回调函数里,让逻辑连贯起来:

$(window).on("load", function (e) {
    $('.preloader').fadeOut('slow');
    
    // 先把两个条件的结果存为变量,让代码更清晰
    const isTestPage = "@pageTitle".indexOf("Test") !== -1;
    const hasDismissedCookie = document.cookie.includes("isDismissed=true");
    
    if (hasDismissedCookie) {
        // Cookie存在:用户已经关闭过弹窗,直接隐藏弹窗容器
        document.body.classList.add("alert-container"); // 这里注意类名,原代码的"alert.container"可能是笔误,类名本身不该带点
    } else {
        // Cookie不存在:再判断是否是Test页面
        if (isTestPage) {
            // 是Test页面:显示弹窗
            document.body.classList.add("show-alert");
        } else {
            // 不是Test页面:不做弹窗相关操作(或根据需求添加隐藏类)
            // document.body.classList.add("alert-container");
        }
    }
});

关键逻辑说明

  1. 先判断Cookie状态:如果用户已经关闭过弹窗(存在isDismissed=true的Cookie),直接执行隐藏弹窗的逻辑,不再往下判断页面标题。
  2. Cookie不存在时再检查页面标题:只有当用户没关闭过弹窗,且当前是Test页面时,才显示弹窗。

额外注意事项

  • 确保关闭弹窗的函数正确设置Cookie,尤其是要指定path=/(全站有效),避免不同页面读取不到Cookie:
    $(".dismiss-btn").on("click", function() {
        // 设置有效期为30天的全站Cookie
        document.cookie = "isDismissed=true; expires=" + new Date(Date.now() + 30*24*60*60*1000).toUTCString() + "; path=/";
        // 隐藏弹窗
        document.body.classList.remove("show-alert");
        document.body.classList.add("alert-container");
    });
    
  • 检查你的类名:原代码里的alert.container大概率是笔误,CSS类名本身不应该包含点,建议改成alert-container这类格式,避免样式不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:34:10