调用JavaScript函数后Submit按钮无法正常提交的问题排查
问题分析与解决方案
你的核心问题是**return false强制阻止了表单的默认提交行为**,不管验证逻辑是否通过,按钮都不会触发表单提交。另外你的JavaScript代码还有语法错误和冗余逻辑,需要一并修正。
1. 修正JavaScript语法与逻辑错误
- 移除
var message = document.getElementById("lblMessage");末尾多余的a - 删除重复的
if (fb.checked)判断 - 让
Validate函数返回布尔值,验证通过返回true,不通过返回false
2. 调整按钮的点击事件
将按钮的onclick改为return Validate();,这样只有当验证通过时才会允许表单提交。
修改后的完整CSHTML代码
@{ ViewData["Title"] = "Home Page"; } <form asp-action="Create"> <input type="checkbox" id="FirstBox" />Is this test? <br /> <input id="test1" name="test1" class="form-control" /> <br /> <input id="test2" name="test2" class="form-control" /> <span id="lblMessage" style="display: none; color: red;">Please fill out at least one text box</span> <br /> <button type="submit" id="myBtn1" onclick="return Validate();">Submit</button> </form> @section scripts { <script type="text/javascript"> function Validate() { var message = document.getElementById("lblMessage"); message.style.display = "none"; var fb = document.getElementById("FirstBox"); var sb = document.getElementById("test1"); var tb = document.getElementById("test2"); // 仅当复选框勾选时才验证文本框 if (fb.checked) { if (sb.value.trim() === "" && tb.value.trim() === "") { message.style.display = "block"; return false; // 验证不通过,阻止提交 } } return true; // 验证通过,允许提交 } </script> }
补充说明
- 给文本框添加了
name属性,这样表单提交时参数能正确传递到控制器(如果后续需要接收这些值的话) - 使用
trim()去除输入内容的前后空格,避免用户输入空格绕过验证 - 控制器代码无需修改,保持现有逻辑即可
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

