JS调用trigger触发提交时出现空对象类型错误
问题产生原因
- 直接根因:jQuery的
.trigger()方法为参数必填方法,必须传入要触发的事件类型字符串,空参调用时方法内部会尝试将接收到的undefined转换为事件配置对象,直接抛出Cannot convert undefined or null to object的类型错误。 - 逻辑隐患:就算补全参数,如果事件类型传错也无法达到提交表单的预期。你使用的属性选择器
input[value="submit"]仅匹配HTML初始value属性为submit的输入元素,若该元素是表单内的提交按钮,只有触发它的点击事件才会冒泡触发表单提交逻辑,空参调用trigger根本没有指定要触发的行为,完全不符合方法调用规范。 - 你定义的flag隐藏域本身不存在语法问题,不会触发本次报错。
修复方法
根据业务逻辑给.trigger()传入正确的事件类型即可,若要更稳定地实现表单提交,也可以直接调用表单的submit方法,修正后的代码如下:
// 隐藏提交按钮 $('input[value="submit"]').hide(); $('#bt-yes').click(function () { // 给flag隐藏域赋值 $('#flag').val("1"); // 写法1:触发提交按钮的点击事件,完成表单提交 $('input[value="submit"]').trigger('click'); // 写法2(更稳定,推荐):直接获取提交按钮所属的表单触发提交,避免按钮状态/属性变化导致选择器失效 // $('input[value="submit"]').closest('form').submit(); })
补充说明:你贴出的控制台报错文本存在拼写笔误(
Uneaught TvoeError应为Uncaught TypeError),不影响本次问题的定位。
内容的提问来源于stack exchange,提问作者Jim K
相关产品推荐
相关产品推荐

