You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按钮onclick调用JSP报错,求无表单无AJAX的可行实现方案

解决按钮onclick调用JSP报错及数组数据传递问题

嘿,我来帮你理清楚这个问题:

首先你原来的按钮代码报错Uncaught SyntaxError: Invalid regular expression flags,核心原因是onclick属性需要的是可执行的JavaScript代码,而不是直接写URL路径。浏览器看到你写的/chbs/adm/HallNamesValidation.jsp,会把它当成正则表达式(因为首尾是/),但后面的路径部分不是合法的正则标志,自然就炸了。

你不想用<form action>,还得传递数组让JSP的getParameterValues()能拿到,除了已经实现的AJAX,这里有两种适合你的改造方式:

方式1:手动构建隐藏表单提交(推荐,支持POST)

这种方式不用页面上显式写<form>,而是用JS动态创建一个隐藏表单,把数组数据塞进去再提交,完全符合你的需求:

<button name="btnSave" id="btnSave" onclick="submitWithArray()" class="btn btn-success">Save to Database</button>

<script>
function submitWithArray() {
  // 1. 创建一个隐藏的form元素
  const hiddenForm = document.createElement('form');
  hiddenForm.action = '/chbs/adm/HallNamesValidation.jsp';
  hiddenForm.method = 'POST'; // POST适合传递多数据,避免URL长度限制
  
  // 2. 假设你的数组数据是这个(替换成你实际的数组)
  const hallNames = ["学术报告厅A", "学术报告厅B", "多功能厅"];
  
  // 3. 给数组每个元素创建同名的隐藏input,这样JSP能通过getParameterValues拿到数组
  hallNames.forEach(name => {
    const input = document.createElement('input');
    input.type = 'hidden';
    input.name = 'hallNames'; // 这个name要和JSP里getParameterValues("hallNames")对应
    input.value = name;
    hiddenForm.appendChild(input);
  });
  
  // 4. 把表单加到页面、提交,之后可以移除
  document.body.appendChild(hiddenForm);
  hiddenForm.submit();
  document.body.removeChild(hiddenForm);
}
</script>

这样提交后,JSP里request.getParameterValues("hallNames")就能拿到完整的数组啦,和用普通表单提交的效果完全一样。

方式2:用GET跳转传递数组(适合数据量小的场景)

如果你的数组数据不多,也可以直接在onclick里拼接URL参数跳转:

<button name="btnSave" id="btnSave" onclick="redirectWithArray()" class="btn btn-success">Save to Database</button>

<script>
function redirectWithArray() {
  const hallNames = ["学术报告厅A", "学术报告厅B", "多功能厅"];
  // 把数组转成URL参数,记得编码避免乱码
  const paramStr = hallNames.map(name => `hallNames=${encodeURIComponent(name)}`).join('&');
  window.location.href = `/chbs/adm/HallNamesValidation.jsp?${paramStr}`;
}
</script>

这种方式会直接跳转到目标JSP,同样能用getParameterValues("hallNames")获取数组,但要注意GET请求的URL长度限制,数据多了就不太合适。

再啰嗦下原写法的问题

你之前直接把URL写在onclick里,浏览器会把/chbs/adm/HallNamesValidation.jsp解析成正则表达式(因为被/包裹),但chbs/adm/HallNamesValidation.jsp不是合法的正则标志(正则标志只能是g、i、m这些单个字母),所以才会抛出那个语法错误。必须把URL放在可执行的JS代码里,比如上面的函数调用方式。

内容的提问来源于stack exchange,提问作者Raky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:49:52