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

JavaScript变量page在窗口resize时值异常的问题排查

问题分析与解决方案

我看到你遇到了窗口 resize 时 page 变量值无法保持当前正确状态的问题,咱们一步步拆解问题并解决它:

1. 核心问题排查

(1)变量作用域不匹配

你在 $(document).ready() 内部用 var page 声明了变量,这意味着它是局部作用域变量,只能在 ready 函数内部访问。而你原本的 resize 事件处理函数是写在 ready 外部的,它无法拿到这个局部的 page 值,此时 resize 里的 page 会被当作全局变量处理,自然和你在点击事件里修改的不是同一个变量。

(2)条件判断的语法错误

在 resize 逻辑里,你写了 if (page = "personal-ionformation") —— 这里用的是赋值运算符 = 而非相等判断运算符 ==(或更严谨的 ===),这会直接把字符串赋值给 page,导致条件永远为真,看起来就像 page 一直是这个值。

(3)拼写错误

你在多处把 personal-information 写成了 personal-ionformation(多了一个字母 i),这会导致点击事件设置的状态和 resize 里的判断字符串不匹配,逻辑自然失效。


修正后的完整代码

我把所有问题都修复了,同时调整了代码结构确保作用域正确:

$(document).ready(function (event) { 
    alert(); 
    // 把page变量放在ready函数顶层,确保内部所有事件都能访问
    var page = "blank"; 

    $(".billing-information").css("display", "none"); 
    $(".services-information").css("display", "none"); 

    $("#next").click(function () { 
        page = "services"; 
        console.log(page); 
        $(".personal-information").css("display", "none"); 
        $(".services-information").css("display", "block"); 
        nextFromPersonalInformationCss(); 
    }); 

    $(".back-from-billing").click(function () { 
        page = "services"; 
        console.log(page); 
        $(".services-information").css("display", "block"); 
        $(".billing-information").css("display", "none"); 
        backFromBillingCss(); 
    }); 

    $(".back-from-service").click(function () { 
        // 修正拼写错误
        page = "personal-information"; 
        console.log(page); 
        $(".personal-information").css("display", "block"); 
        $(".services-information").css("display", "none"); 
        backFromServicesCss(); 
    }); 

    $(".next-from-service").click(function () { 
        page = "billing"; 
        console.log(page); 
        $(".services-information").css("display", "none"); 
        $(".billing-information").css("display", "block"); 
        nextFromServicesCss(); 
    }); 

    // 把resize事件放到ready内部,确保能访问局部的page变量
    $(window).resize(function () { 
        var width = $(window).width(); 
        if (width <= 767) { 
            console.log(page); 
            // 修正判断运算符+拼写错误
            if (page === "personal-information") { 
                $(".personal-detail").css("display", "block"); 
                $(".services").css("display", "none"); 
                $(".billing").css("display", "none"); 
            } else if (page === "services") {
                // 补充services状态的显示逻辑
                $(".personal-detail").css("display", "none"); 
                $(".services").css("display", "block"); 
                $(".billing").css("display", "none"); 
            } else if (page === "billing") {
                // 补充billing状态的显示逻辑
                $(".personal-detail").css("display", "none"); 
                $(".services").css("display", "none"); 
                $(".billing").css("display", "block"); 
            }
        }
    });
});

额外优化建议

  • 尽量使用 === 进行严格相等判断,避免类型转换带来的意外问题;
  • 可以把页面状态的显示隐藏逻辑封装成单独函数(比如 updatePageDisplay(page)),减少重复代码,提升可维护性;
  • 给 resize 事件添加防抖处理,避免窗口拖动时频繁触发事件影响性能:
    var resizeTimeout;
    $(window).resize(function () {
        clearTimeout(resizeTimeout);
        resizeTimeout = setTimeout(function() {
            // 你的resize处理逻辑
        }, 200);
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:34