我有一个带有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()

10-06 04:57
查看更多