我已经将提交事件绑定到表单,并确保它们不会破坏表单,使用这样的jQuery:
jQuery('form').submit(function(e){
var form = this;
e.preventDefault();
alert('1');
setTimeout(function() {
alert('2');
form.submit();
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但是,如果由于某种原因,前端开发人员给这个表单的子输入id ="submit",这会form.submit()导致JavaScript错误(在Chrome中,'Uncaught TypeError:Property'提交'对象#不是一个函数').
你可以看到这里发生的一个例子:http://jsfiddle.net/q68ky/(如果没有,这是行为<input id="submit">:http://jsfiddle.net/JpXzL/
现在,我知道我可以阻止它绑定具有id为'submit'的子节点jQuery('form').not(:has('#submit')).submit()的表单,并且表单将处理得很好,但我的绑定永远不会触发这些表单.
所以,问题是:我如何安全地将这个jQuery函数绑定到所有表单,包括那些<input id="submit">?
编辑:值得注意的是,如果我取消绑定提交处理程序然后触发jQuery提交,这个问题不会消失jQuery(form).