JS表单校验函数未正常调用问题排查:onSubmit事件失效
解决JS表单校验函数无法触发的问题
我来帮你搞定这个表单校验的问题,你的代码里有几个容易忽略的细节错误,导致校验逻辑根本没生效:
问题根源分析
- 大小写拼写错误:JavaScript是严格区分大小写的,你写的
getelementById是错误的,正确的API名称是getElementById(注意E和B是大写)。这个错误会直接导致获取元素失败,校验逻辑连执行的机会都没有。 - 未阻止表单默认提交行为:就算校验逻辑正常执行了,你只是弹出提示框,但没有告诉浏览器要阻止表单提交。所以不管校验结果如何,表单都会直接提交。
- 变量未声明(编码规范问题):
firstname和lastname没有用let/const声明,会变成全局变量,虽然不影响这次校验,但这是不良编码习惯,容易引发其他问题。
修正后的完整代码
<!DOCTYPE html> <html> <body> <script> function check(){ let firstname = document.getElementById("firstname").value; let lastname = document.getElementById("lastname").value; if(lastname === ""){ alert('please enter lastname'); return false; // 校验不通过,阻止表单提交 } return true; // 校验通过,允许表单提交 } </script> <form action="" method="post" onSubmit="return check();"> <input type="text" id="firstname" name="firstname" ><br> <input type="text" id="lastname" name="lastname" ><br> <input type="submit" value="submit"> </form> </body> </html>
关键修改说明
- 修正了
getElementById的大小写拼写,确保能正确获取输入框的值; - 在
onSubmit事件里改成return check(),同时在函数里通过return false来阻止表单提交,return true允许提交; - 用
let声明变量,避免全局变量污染,符合现代JS编码规范。
现在点击提交按钮,如果lastname为空,会弹出提示框,并且表单不会提交;输入内容后,表单会正常提交。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

