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

HTML页面存在两个form表单,点击form2的按钮却提交form1的数值如何解决?

问题原因

  • HTML规范要求id属性全局唯一,你的代码中两个表单的输入框都使用了相同的id text,document.getElementById()查询时只会返回整个文档中第一个匹配的元素,也就是form1里的输入框,所以不管点击哪个表单的提交按钮,读取的都是form1的输入值。

修复方案

方案1:修改id为全局唯一,传参区分目标输入框

调整后的JS代码:

function chk(textId) {
  var text = document.getElementById(textId).value;
  console.log(text);
  return false;
}

调整后的HTML代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form id="form1">
  <input type="text" id="text1" value="Hi">
  <input type="submit" id="submit1" onclick="return chk('text1')">
  <label for="submit1">Hi</label>
</form>

<form id="form2">
  <input type="text" id="text2" value="bonjour">
  <button id="submit2" onclick="return chk('text2')">btn</button>
  <label for="submit2">bonjour</label>
</form>

方案2:通过事件关联所属表单,无需提前指定id

这种方案扩展性更强,后续新增表单不需要修改核心逻辑,给输入框加通用类名区分即可:
调整后的JS代码:

function chk(e) {
  // 获取触发事件的元素所属的表单
  const currentForm = e.target.closest('form');
  // 在当前表单范围内查找对应输入框
  var text = currentForm.querySelector('.form-text').value;
  console.log(text);
  return false;
}

调整后的HTML代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form id="form1">
  <input type="text" class="form-text" value="Hi">
  <input type="submit" id="submit1" onclick="return chk(event)">
  <label for="submit1">Hi</label>
</form>

<form id="form2">
  <input type="text" class="form-text" value="bonjour">
  <button id="submit2" onclick="return chk(event)">btn</button>
  <label for="submit2">bonjour</label>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:24:03