通过链接向JavaScript传值时URL参数为undefined的问题
问题成因
跳转URL中orderNumber值为undefined是三处代码问题共同导致的:
- 传参与接收不匹配:内联
onclick事件中已经向myFunction2传入了订单ID参数,但函数定义时没有声明对应形参接收传入值,根本拿不到传入的订单号。 this指向逻辑错误:通过内联onclick属性直接调用普通函数时,函数内部的this默认指向全局window对象,而非触发点击的<a>标签;window对象本身没有id属性,读取this.id得到的结果自然是undefined。- 存在语法隐患:现有PHP拼接逻辑没有给传入的参数包裹字符串引号,如果订单号包含非数字字符(字母、特殊符号等),会直接触发JS语法错误,代码完全无法运行。
修复方法
按以下两步调整代码即可:
- 修改JavaScript函数,声明形参接收传入的订单ID,不再错误使用
this取值:
<script> // 增加orderId形参接收传入的订单号 function myFunction2(orderId) { var msg2 = encodeURIComponent(orderId); var myWindow = window.open("https://myurl.com/OaJER1?orderNumber="+ msg2 , "MsgWindow", "width=650,height=1000"); } </script>
- 调整PHP的echo拼接逻辑,给传入的参数补充单引号包裹,保证最终渲染的HTML符合JS语法要求:
$order_id_inpro = "1234"; // 转义单引号,保证最终输出到页面的onclick属性值为 myFunction2('1234') echo '<a class="dropdown-item" onclick="myFunction2(\''.$order_id_inpro.'\')">Upgrade Order</a>';
调整后最终渲染出的HTML代码为合法格式,点击链接时可以正确拿到订单号拼接到跳转URL中。
内容的提问来源于stack exchange,提问作者Matthew Payton
相关产品推荐
相关产品推荐

