添加jQuery表单submit事件后表单无法提交至控制器的原因
问题原因及解决方案
你遇到的问题大概率是这段JS代码在特定场景下中断了表单的默认提交流程,具体原因和修复方法如下:
1. 旧浏览器下console.log引发的JS错误
在IE8及更早的版本中,console对象只有在开发者工具(F12)打开时才会存在。如果用户没打开开发者工具,调用console.log会抛出ReferenceError,导致JS执行中断,浏览器也就不会继续执行表单提交的默认行为。
2. 事件处理未明确允许默认行为
虽然你的代码里没有调用e.preventDefault()或返回false,但如果事件处理函数执行时出现未捕获的错误(比如上面的console不存在问题),会直接终止后续的默认提交流程。
快速修复方案
修改你的JS代码,避免错误并明确允许默认提交:
$("#crmtForm").submit(function (e) { // 安全调用console,避免旧浏览器报错 console && console.log('submit'); // 明确返回true,告诉浏览器继续执行默认提交 return true; });
额外排查点
你也可以检查以下内容排除其他干扰:
- 确保JS代码在DOM加载完成后执行,包裹在
$(document).ready()中:
若代码在DOM渲染前执行,$(document).ready(function() { $("#crmtForm").submit(function (e) { console && console.log('submit'); return true; }); });$("#crmtForm")找不到元素,事件绑定会失败(不过这不会阻止表单提交,但养成DOM就绪后绑定事件的习惯更稳妥)。 - 检查表单中隐藏的
ListBoxFor元素(style="display:none;")带有required="required"属性,HTML5原生验证可能对隐藏元素生效,导致验证不通过阻止提交。可以暂时移除该required属性测试,或用JS自定义该元素的验证逻辑。
内容的提问来源于stack exchange,提问作者Bassie
相关产品推荐
相关产品推荐

