javascript - 如何提交已被 event.preventDefault() 拦截的表单

标签 javascript jquery forms form-submit preventdefault

我有一个 id="edit_profile"的普通表单。

提交表单后,我想拦截它并检查是否需要通过谷歌地图 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

我最近读过一些东西,但现在找不到关于必须使用 native JavaScript 来提交表单而不是 jQuery 的信息(我猜是因为表单提交的 jQuery 事件处理程序已被告知要阻止默认)。

但是如果我尝试一些变体,例如 document.getElementById('edit_profile').submit();document.forms[0].submit();我收到相同的错误或类似错误。

最佳答案

DOM 元素没有方法 .submit ——但是 jQuery 对象有(仅在 form 元素上)——基本上,你忘了包装 this 在 jQuery 中:

$(this).submit();

引用号:https://api.jquery.com/submit/

编辑:

我明白你是从哪里得到“无限循环”场景的。实际上,您应该将处理程序设置为在单击“提交”按钮时触发,而不是在表单实际提交时触发。

到目前为止,您捕获了表单 submit 操作并阻止默认操作(即提交)——然后您执行一些操作并在 上调用 submit >这个。好吧,这将触发表单 submit 的处理程序,这会再次阻止默认操作!因此,简而言之,在“提交”按钮上放置一个处理程序,阻止默认操作,执行逻辑,然后调用 $("#edit_profile").submit()

关于javascript - 如何提交已被 event.preventDefault() 拦截的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945943/

相关文章:

javascript - 如何通过 child 的ID查找 parent 的ID

javascript - jQuery 排队 css 方法

javascript - 从表单中获取值

python - 使用 Django 模型表单 + 表单向导 + Crispy - 不进行第二步

javascript - 如何将 Google Maps TERRAIN map 类型设为黄色而不是绿色?

javascript - 从 Chrome 扩展程序中删除 cookie

javascript - 辅助功能键盘仅选项卡到 z-index "Back to Top"

c# - "Emulating"Application.Run 使用 Application.DoEvents

javascript - 无法附加带有静态选项的下拉列表

javascript - jQuery:动态更改对象的属性