繁体   English   中英

jQuery-e.preventDefault难题/阻止默认后无法提交表单

[英]jQuery - e.preventDefault conundrum / can't submit form after preventing default

目标:停止“提交”按钮,确认字段,创建弹出式结果警报,关闭弹出式窗口时提交表单。

所以我有一个隐藏的popover div,当按下“提交”按钮时,我这样做是为了检查某些条件并显示弹出窗口:

$("form").submit(function(e) {
    e.preventDefault();
      if (($("#conditions").find("input:checkbox:checked").length ) || $('#radio_condition_1').is(":checked")) {
        $("#popback").css('display', 'block');
    }
 }); 

然后,我认为这段代码将在清除弹出窗口后提交表单:

$("#popback").click(function() {
    $("#popback").css('display', 'none');
    $("form").submit();

});

没有:

$("form").submit();

第二个代码可以很好地清除弹出窗口。 但是,插入了Submit函数后,它不仅不会清除弹出窗口,也不会提交表单。

注意:页面上有两种形式。

救命?

请执行以下操作:

$('form')[0].submit();

您拥有的$('form').submit()会触发Submit事件,从而再次触发Submit处理程序,这又会阻止默认表单提交,而您又回到了起点!

概念验证

第1步:加载上面的演示,您将在控制台中看到submit event triggered

步骤2:现在取消注释$('form')[0].submit()并注释掉$('form').submit()并单击run和viola ..表单被提交..绕过了submit事件处理程序。

结论: ...见上文。

更新

如果页面上有多个表单,可以将上面的代码调整为相关表单的目标。 例如,要提交页面上的第一个表单:

$('form').first()[0].submit();

或简单地使用提供所需级别的特定性的任何选择器,例如ID或CSS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM