JavaScript基于Cookie值的条件判断仅最后一个if语句执行异常
问题根因
你的代码存在两个核心语法/逻辑错误,导致所有if判断永远成立、按顺序全部执行:
- 混淆了赋值运算符
=和相等比较运算符===/==:你在每个if的条件括号里写的是变量名 = "true",这不是判断变量值是否等于"true",而是直接把字符串"true"赋值给对应变量。赋值表达式本身的返回值就是被赋的"true",属于JavaScript里的真值,因此每一个if块都会从上到下依次执行,最后执行的就是滚动到#tv的逻辑,所以页面最终总会停在最后一个区块。 - 现有代码完全没有读取你提前存储的Cookie值,所有变量初始手动赋值为null之后,又在if条件里被强行覆盖为"true",和你实际存在浏览器里的Cookie值没有任何关联,自然不会按照Cookie的实际值触发对应逻辑。
修复方案
- 先封装简单的Cookie读取方法,拿到你实际存储的目标Cookie值
- 把所有if条件里的赋值符号
=替换为严格相等比较符===,判断Cookie值是否匹配 - 由于你同一时间只有一个有效Cookie,匹配到对应值执行滚动后可以直接终止后续判断,避免多余执行
修复后的完整JS代码如下:
jQuery(document).ready(function ($) { // 封装原生Cookie读取方法 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); return null; } // 读取实际存储的Cookie值,不要手动写死变量值 const csomagcookie = getCookie('csomagcookie'); const triocsomagcookie = getCookie('triocsomagcookie'); const internetcsomagcookie = getCookie('internetcsomagcookie'); const tvcsomagcookie = getCookie('tvcsomagcookie'); // 用===做值比较,禁止在判断条件里写赋值操作 if (csomagcookie === "true") { document.getElementById("csomag").scrollIntoView(); return; } if (triocsomagcookie === "true") { document.getElementById("trio").scrollIntoView(); return; } if (internetcsomagcookie === "true") { document.getElementById("internet").scrollIntoView(); return; } if (tvcsomagcookie === "true") { document.getElementById("tv").scrollIntoView(); return; } });
原有CSS和HTML代码不需要修改,替换上述JS逻辑后即可按照实际存储的Cookie值滚动到对应区块,不会再出现强制跳转到最后一个区块的问题。
注:如果你存储Cookie时用的布尔值不是字符串格式的
"true",根据实际存储的格式调整比较的目标值即可。
内容的提问来源于stack exchange,提问作者Pbalazs89
相关产品推荐
相关产品推荐

