
本文详解为何html表单中点击登录按钮无法触发php数据提交,而按enter键却可以,并提供完整解决方案,包括表单结构修正、javascript事件绑定优化及安全注意事项。
在您提供的代码中,核心问题在于:登录按钮()并非原生 或 。它既没有 type=”submit” 属性,也未通过 JavaScript 显式调用 form.submit(),更未阻止默认跳转行为——这导致点击时仅执行了 javascript:void(0);”> 的空操作,而实际提交行为被绕过。
与此同时,您页面中存在两个独立表单:
- 主登录表单:
- 密码修改表单:
当用户聚焦在用户名/密码输入框并按 Enter 键时,浏览器会自动触发声焦点所在表单的原生提交(即 loginForm),因此 post.php 被正确执行;但点击“Login”链接时,由于该 标签未与 loginForm 建立任何提交关联,它既不触发表单提交,也不阻止页面跳转逻辑(尤其当存在其他脚本干扰时),最终导致数据丢失。
✅ 正确解决方案
1. 将登录按钮改为语义化、可提交的 HTML 元素
删除无效的 按钮,改用标准
⚠️ 注意:不要使用 style=”display:none” 隐藏关键提交控件;若需视觉隐藏但保留功能,请用 position: absolute; left: -9999px; 等无障碍友好的方式。
2. 移除干扰性的 onsubmit JavaScript(除非必要)
您当前的表单有 onsubmit=”return doLogin2();”,但代码中未定义 doLogin2 函数。若该函数不存在或返回 false,将直接阻止表单提交。请检查并移除该属性,或确保其逻辑明确返回 true: