在javascript表单提交中未采用e.preventDefault()函数

时间:2016-08-03 09:04:22

标签: javascript php jquery ajax

当点击提交按钮时,我想验证表格,并在ajax调用中想要检查验证码是否正确。如果它不正确则需要错误信息并阻止表单提交。

这是我的javascript代码

$(document).on("click","#submit-reservation",function(e){
    if($('#myform').isValid()){

      var cval = $('#captcha-input').val();
      var dataString = 'captachacheck=true&cval='+cval;
      $.ajax({
        type: "POST",
        url: "{/literal}{$smarty.session.siteloc}reservation/checkcaptcha/{literal}",
        data: dataString,
        cache: false,
        success: function (data) {
          console.log(data.status);
          if(data.status == "error"){
            $("#captcha-wrap").append('<span class="help-block form-error" style="color: red;"> * Invalid Captcha</span>');
             e.preventDefault();
          }
          else{
           $('#submit-reservation').click();
          }


        }
      });

    }


  });

2 个答案:

答案 0 :(得分:0)

我想在你的表单中,你有提交按钮声明为: -

<input type="submit" id="submit-reservation">

即使你添加了事件处理程序,ajax调用也是异步的,因此e.preventDefault不会工作,因为表单会一直提交到那时。

使用

<button id="submit-reservation">Submit</button>
<input type="submit" id="submitForm" hidden>

在ajax电话中: -

      if(data.status == "error"){
        $("#captcha-wrap").append('<span class="help-block form-error" style="color: red;"> * Invalid Captcha</span>');

      }
      else{
       $('#submitForm').trigger("click");
      }

如果您的通话没有返回任何错误,则会触发此事件

答案 1 :(得分:0)

使用submit触发提交,将阻止功能放在ajax之外

$(document).on("click","#submit-reservation",function(e){
    e.preventDefault();
    if($('#myform').isValid()){

      var cval = $('#captcha-input').val();
      var dataString = 'captachacheck=true&cval='+cval;
      $.ajax({
        type: "POST",
        url: "{/literal}{$smarty.session.siteloc}reservation/checkcaptcha/{literal}",
        data: dataString,
        cache: false,
        success: function (data) {
          console.log(data.status);
          if(data.status == "error"){
            $("#captcha-wrap").append('<span class="help-block form-error" style="color: red;"> * Invalid Captcha</span>');

          }
          else{
           $('#submit-reservation').closest('form').submit();
          }


        }
      });

    }


  });