使用jQuery提交表单会导致浏览器崩溃

时间:2014-03-19 09:05:30

标签: jquery

我正在尝试使用jQuery提交表单,但有时它会挂起浏览器,有时会崩溃。我正在使用jQuery validate插件,我希望在验证通过后提交表单。我是否有可能在验证通过后正常提交表单,我不想用jQuery提交

这是我的小代码片段。

  var validate = function () {

        $('#contactForm').validate({           
            rules: {
                'first-name': {
                    required: true
                },
                'sur-name': {
                    required: true
                }
            },           
            submitHandler: function (form) {

                $('#contactForm').submit();

                return false;
            }
        });
    };

    $('#submitEnquiryForm').click(validate);

4 个答案:

答案 0 :(得分:5)

那是因为验证通过(侦听提交事件)并且您一次又一次地触发submit事件。

submit -> validate -> submit -> validate -> ... -> crash(maximum call stack size exceeded)   

尝试:

form.submit();

或:

$('#contactForm')[0].submit();

将正常提交表单,并且不会调用validate方法。

答案 1 :(得分:1)

您可以使用它而不是jquery.validate:

<style>
    .error {
        border: 2px solid red;
    }
</style>

<head>
    <script src="http://code.jquery.com/jquery-1.10.2.js" type="text/javascript"></script>
</head>

<body>
   <form id="contactForm" action="javascript:alert('submitted')">
      <input type="text" id="first-name"/>
      <input type="text" id="sur-name"/>
      <input type="submit" />
   </form>
</body>

<script>
   $('#contactForm').submit(function (event) {

      fname = $('#first-name');
      sname = $('#sur-name');

      if (!fname.val())
      {
         fname.addClass('error');
         event.preventDefault();
      }
      else
      {
         fname.removeClass('error');
      }       

      if (!sname.val())
      {
         sname.addClass('error');
         event.preventDefault();
      }
      else
      {
         sname.removeClass('error');
      }
   });
</script>

答案 2 :(得分:0)

  

在jquery中使用.Off()事件。 .off()方法删除事件处理程序   用.on()附加的。

$('#submitEnquiryForm').off("click").on("click" , validate);

答案 3 :(得分:0)

据我所知,当您点击#submitEnquiryForm验证#contactForm并提交时,您的代码就会出现。 ¿好吗?

提交表单时会调用

submitHandler函数,因此您处于无限循环中;提交事件触发器再次提交。

您无需在submit中致电submitHandler

我认为一定是:

 $('#contactForm').validate({           
    rules: {
        'first-name': {
            required: true
        },
        'sur-name': {
            required: true
        }
    }
});

$('#submitEnquiryForm').click(function(){
    $('#contactForm').submit();
});

如果要使用点击#submitEnquiryForm而不是其提交按钮,则在触发提交事件时验证表单。 submitHandler函数适用于其他purpouse,就好像您想在提交之前进行其他操作或测试一样。