JS中form.submit()无法提交的常见原因:按钮ID命名冲突

作者:像素漫游

时间:2026-10-28

浏览:451

本文分析JavaScript中调用form.submit()方法无法提交表单的典型案例。研究发现,当表单内存在ID或name为submit的按钮时,会覆盖原生的submit方法,导致调用失效。通过修改按钮ID避免命名冲突,即可恢复正常提交功能。

文章目录

问题背景与代码示例

以下是具体的代码示例:

HTML结构代码如下:

<div id="register">
<h4>会员注册</h4>
<div class="formdiv">
<form method="post" action="register.php?action=register" name="register" id="registerForm">
<dl>
<dt>请认真填写以下内容</dt>
<dd class="hasspan">
用户名:<input type="text" name="username">
</dd>
<dd class="hasspan">
密码:<input type="password" name="pwd">
</dd>
<dd class="hasspan">
确认密码:<input type="password" name="pwdagain">
</dd>
<dd id="tximg">
<img src="img/face/m01.gif" alt="选择头像" id="faceimg">
<input type="hidden" name="touxiang" value="">
<label id="imgsrclabel">m01.gif</label>
</dd>
<dd style="margin-right:120px;">
验证码:<input type="text" name="code">
<span>
<img src="code.php" alt="code" id="code" name="code">
<a href="#code" id="change">换一张</a>
</span>
</dd>
<dd class="btns">
<input type="button" name="submit" id="submit" value="注册">
<input type="button" name="quit" id="quit" value="退出">
</dd>
</dl>
</form>
</div>
</div>
 

JavaScript处理逻辑

表单数据提交至当前页面,JavaScript处理逻辑如下:

JavaScript代码如下:

/*注册表单提交*/
function formDeal()
 {
var btnSubmit = document.getElementById('submit');
var formId = document.getElementById('registerForm');
btnSubmit.onclick = function()
     {
//表单的submit()方法不能提交表单
formId.submit();
     }
 }

问题排查与解决方案

若表单提交成功,页面应显示提示信息:


PHP后端处理代码如下:

if(!empty($_GET['action']) && $_GET['action'] == 'register')
 {
echo '你提交了数据';
exit();
 }

经过多次测试,始终未出现预期的提示信息。排查代码逻辑及官方文档后,确认JavaScript语法无误。

由于formId.submit()无法触发提交,临时将btnSubmit的类型修改为submit以绕过问题:

JavaScript修改代码如下:

this.type="submit"

查阅相关资料后,通常认为导致该问题的原因主要有两点:

1、表单中不能存在name属性为“submit”的标签元素

2、表单中必须包含enctype="multipart/form-data"属性

经实际测试,上述两点均未能解决当前问题(可能因具体运行环境差异所致)。

随后,根据论坛建议将注册按钮的ID名称更改为非submit的值。修改后,表单成功提交,提示信息正常显示。

总结:按钮的ID不应设置为submit,否则会与表单原生的submit方法产生命名冲突,导致formId.submit()调用失效。在命名ID时,应避免与现有API或HTML属性名称重复,以规避此类潜在问题。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章