意外编码无限循环到我的ASP.NET MVC应用程序的jQuery代码

时间:2017-10-10 20:22:16

标签: javascript jquery asp.net-mvc asp.net-mvc-4

我使用以下JavaScript代码收到以下错误:

  

RangeError:超出最大调用堆栈大小

我假设这意味着我不小心将无限循环编码到我的JavaScript中。此代码来自使用jQuery Validate的ASP.NET MVC应用程序。此代码的目的是检查在提交之前在页面上捕获的图像。

基本上,这是需要与jQuery Validate一起发生的另一个前端验证。似乎我唯一的选择就是在提交表单时运行此代码,特别是因为" submit"之间没有其他事件发生。按钮单击和提交。这是代码:

$('form').submit(function (e) {
    e.preventDefault();
    //If Corporation is selected as business type
    if ($('#businessStructure').val() == "Corporation") {
       //Checks CEO signature present
       if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
            alert("Please sign and save your signature in the CEO signature pad");
            $("#ceoError").show();
       }
       else {
           //all good, an image exists
           $('form').submit();
       }
     }
    //If Sole Proprietor is selected as business type
    else if ($('#businessStructure').val() == "SoleProprietor") {
       //Checks CEO signature present
       if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
           alert("Please sign and save your signature in the CEO signature pad");
           $("#ceoError").show();
       }
       //Checks partner1 signature present
       if ($("#signImage1").length == 0 || $("#signImage1").attr("src") == "") {
           alert("Please sign and save your signature in the first partner signature pad");
           $("#partner1Error").show();
       }
       else {
           //all good, an image exists
           $('form').submit();
       }
     }

     else {
        //Checks CEO signature present
        if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
            alert("Please sign and save your signature in the CEO signature pad");
            $("#ceoError").show();
        }
        //Checks partner1 signature present
        if ($("#signImage1").length == 0 || $("#signImage1").attr("src") == "") {
            alert("Please sign and save your signature in the first partner signature pad");
            $("#partner1Error").show();
        }
            //Checks partner2 signature present
            if ($("#signImage2").length == 0 || $("#signImage2").attr("src") == "") {
                alert("Please sign and save your signature in the second partner signature pad");
                $("#partner2Error").show();
            }
            else {
                //all good, an image exists
                $('form').submit();
            }
     }
});

这是我第一次使用MVC应用表单提交完成并发事件。是否有一种我不知道的不同方法?

1 个答案:

答案 0 :(得分:1)

正如其他人在评论中提到的那样,你在代码中的表单上调用了submit方法,这将使整个代码再次执行,包括你的else条件,这又会再次调用提交,从而导致无限提交事件

else {
           //all good, an image exists
           $('form').submit();
       }

要解决此问题,您可以使用表单

中的按钮ID连接活动
<form action="someUrl" method="post">
   <button type="button" id="btn-save">Save</button>
</form>

,脚本将是

$("#btn-save").click(function(e){
  e.preventDefault();
  // your existing code 
});

要获得对表单的引用,我建议使用相对选择器获取表单。在这种情况下,closest()方法将非常方便

$("#btn-save").click(function(e){
  e.preventDefault();
  var $form = $(this).closest("form");

  if(yourValidationCodeGoesHere)
  {

  }
  else
  {
    $form.submit();
  }

});