页面间传递变量后条件判断函数失效问题排查
问题:点击按钮传递变量到另一页面后,条件比较函数无法正常工作
我看了你的代码,问题出在第二页的参数解析逻辑上——你定义了解析URL参数的qs()函数,但从来没有调用它,而且somval变量也没被赋值,所以它一直是undefined,这就是控制台报错的原因。
具体问题拆解:
- 第二页中,你只声明了
var somval;但没有给它赋值,所以初始值是undefined qs()函数负责提取URL里的查询参数,但你没有执行这个函数,导致qsParm数组是空的,根本拿不到URL里的somval参数值- 最后调用
compare()时,somval是undefined,自然不会触发任何if/else分支
修复后的第二页代码:
<script> var somval; var qsParm = new Array(); function qs() { var query = window.location.search.substring(1); var parms = query.split('&'); for (var i=0; i < parms.length; i++) { var pos = parms[i].indexOf('='); if (pos > 0) { var key = parms[i].substring(0, pos); var val = parms[i].substring(pos + 1); qsParm[key] = val; } } } // 1. 先调用qs()解析URL参数,把参数存入qsParm qs(); // 2. 给somval赋值,从qsParm中取出对应的参数值 somval = qsParm['somval']; function compare(){ // URL参数解析出来是字符串类型,用严格相等===更安全,避免隐式类型转换问题 if(somval === '1'){ alert(1); $("#radio_1").prop("checked", true); }else if(somval === '2'){ alert(2); $("#radio_2").prop("checked", true); }else{ alert('未匹配到有效参数'); }; } compare(); </script>
额外优化小建议:
- 第一页的
pass函数可以简化,不用额外声明somval变量,直接写window.location = 'contact/index.php?somval=' + x;就行 - 可以给
somval加个默认值,比如somval = qsParm['somval'] || '0';,防止参数不存在时的异常
内容的提问来源于stack exchange,提问作者Fernando Souza
相关产品推荐
相关产品推荐

