如何通过链接传递函数返回值?需在另一函数中获取total值
嘿,我来帮你理清楚这两个问题的解决方案,其实你的代码已经迈出正确的一步啦!
1. 在另一个函数中获取total的值
你写的call函数里,已经通过var a = recalculateTotal(sc);正确拿到了recalculateTotal返回的total值,这个逻辑完全没问题~
不过要注意一个前提:确保你传递的sc参数是有效的jQuery对象,因为recalculateTotal里用了sc.find('selected')方法。比如你需要先定义sc为页面中包含座位的容器,比如:
var sc = $('#seat-container'); // 假设你的座位容器id是seat-container
如果sc不是正确的DOM集合,find('selected')就找不到选中的座位元素,最终total会一直是0。
2. 通过链接传递函数返回的值
你用window.location.replace把total值拼到URL参数里的思路是对的,这里可以补充两个优化点,让代码更健壮:
(1)对参数值进行URL编码
虽然数字本身不会有URL解析问题,但如果未来total包含特殊字符(比如金额里的逗号,或者其他场景的特殊字符),直接拼接会导致URL失效。建议用encodeURIComponent对参数值编码:
function call() { var a = recalculateTotal(sc); window.location.replace("Demo2.jsp?name=" + encodeURIComponent(a)); }
(2)在目标页面接收参数
如果是后端页面(比如Demo2.jsp是Java页面),可以用后端代码获取参数:
String totalStr = request.getParameter("name"); double total = Double.parseDouble(totalStr);
如果是前端在Demo2.jsp中读取这个参数,可以用URLSearchParams API:
// 在Demo2.jsp的前端脚本中 const urlParams = new URLSearchParams(window.location.search); const totalValue = urlParams.get('name'); // 转成数字类型使用 const total = parseFloat(totalValue);
补充检查点
- 确认
recalculateTotal里的价格获取逻辑正确:如果你的座位元素是用jQuery的data()方法存储价格,要注意this是原生DOM节点,没有data()方法,需要改成$(this).data('price');另外如果selected是CSS类名,find('selected')要改成find('.selected')(不然会查找<selected>标签,这大概率不是你想要的)。修正后的recalculateTotal:
function recalculateTotal(sc) { var total = 0; sc.find('.selected').each(function() { total += $(this).data('price'); }); return total; }
内容的提问来源于stack exchange,提问作者John Dee
相关产品推荐
相关产品推荐

