JavaScript URL匹配异常:跳转后两个if条件均触发的问题求助
问题分析与解决方案
你的问题核心在于URL匹配的逻辑不够精确,导致两个if条件都被触发:当URL是/reception-order-header-supplier/xxx时,/reception-order-header/?这个匹配规则会命中其中的子串/reception-order-header/,所以第二个alert('2')也会执行。
解决方法:使用精确的路径匹配
推荐用window.location.pathname获取当前页面的路径部分(比直接用href更靠谱,因为它只包含路径,不会混入域名、查询参数等内容),然后通过以下几种方式做精准判断:
方式1:带锚点的正则表达式
用^(字符串开头)和$(字符串结尾)限定匹配范围,确保只匹配完整的目标路径:
$(document).ready(function() { const path = window.location.pathname; // 匹配 /reception-order-header-supplier 或 /reception-order-header-supplier/ if (path.match(/^\/reception-order-header-supplier\/?$/)) { alert('1'); } // 匹配 /reception-order-header 或 /reception-order-header/ if (path.match(/^\/reception-order-header\/?$/)) { alert('2'); } });
方式2:直接字符串判断(更直观)
如果路径后面会跟ID等参数(比如/reception-order-header-supplier/123),可以用startsWith并排除混淆路径;如果是固定路径,直接全等判断即可:
$(document).ready(function() { const path = window.location.pathname; // 处理带supplier的路径(支持后续带参数) if (path.startsWith('/reception-order-header-supplier')) { alert('1'); } // 处理普通订单路径,同时排除supplier的子路径 if (path.startsWith('/reception-order-header') && !path.startsWith('/reception-order-header-supplier')) { alert('2'); } });
额外提醒:你的点击函数有潜在bug
第二个点击函数里,$.get("/reception-type/"+type, ...)中的type变量未定义!第一个函数里你通过var type = $(this).attr('data-type');获取了类型,但第二个函数漏掉了这一步,会导致请求URL变成/reception-type/undefined,需要补上:
$('a[href="#reception-order"]').on('click', function() { // 补上获取type的代码 var type = $(this).attr('data-type'); $.get("/reception-type/"+type, function(data) { // 原有的弹窗渲染、事件绑定逻辑... }); });
内容的提问来源于stack exchange,提问作者user3242861
相关产品推荐
相关产品推荐

