我有一个带有id =“ edit_profile”的普通香草表单。
提交表单后,我想拦截它,并检查是否需要通过google maps api对地址进行地址解析,如果不需要,则继续提交。
就像是:
$('#edit_profile').on('submit', function(event) {
event.preventDefault();
if ( some test ) {
geocode_address( address, this ); // the api callback will handle form submit
} else {
// we want to go ahead and submit the form
this.submit();
}
});
问题是
this.submit()
引发错误TypeError: Property 'submit' of object #<HTMLFormElement> is not a function
我最近读了一些书,但现在找不到必须使用本机JavaScript来提交表单而不是jQuery的信息(我猜是因为已经告知表单提交的jQuery事件处理程序可以防止preventDefault)。
但是,如果尝试使用
document.getElementById('edit_profile').submit();
或document.forms[0].submit();
之类的变体,则会出现相同的错误或错误。 最佳答案
DOM元素没有方法.submit
-但jQuery对象却有(仅在form
元素上)-基本上,您忘记了将this
包装在jQuery中:
$(this).submit();
参考:https://api.jquery.com/submit/
编辑:
我知道您从哪里得到“无限循环”方案。实际上,您应该将处理程序设置为在单击Submit
button
而不是表单实际提交时触发。到目前为止,您捕获了
submit
表单动作并阻止了默认动作(正在提交)-然后您做了一些工作并在submit
上调用this
。好吧,这将触发表单submit
的处理程序,从而再次阻止默认操作!因此,简而言之,在您的“提交”按钮上放置一个处理程序,阻止默认操作,执行逻辑,然后调用$("#edit_profile").submit()