在失败的ajax验证失败后,parsley.js会阻止提交

时间:2018-04-10 23:01:47

标签: ajax parsley.js custom-validators

我有一个表单,我需要查看表单中输入的电子邮件地址是否已存在于数据库中。此检查需要根据表单中另一个字段的值有条件地执行。

这是表单字段:

<input type="email" value="" class="form-control" name="email_bill" id="email" required data-parsley-type="email" data-parsley-registered="1" data-parsley-trigger="focusout submit">

以及验证码:

Parsley.addValidator('registered', {
   validateString: function(value) {
   if ($('input[name="d_type"]:checked').val() == 'S') {  
     return $.ajax({
      type: "POST",  
      url: "/is_registered.html",  
      data: $('form').serialize()  
     });
    } else {
         var parent = $('#email').closest('div');
         var this_id = $('#email').attr('data-parsley-id');
         $(parent).removeClass('has-error').addClass('parsley-success');
         $(this_id).remove();
         return true;
         }
   },
   messages: {en: "Someone has already registered with the Email address you entered"}

});

服务器代码很简单,并返回一个&#39; 200 OK&#39;如果地址不在数据库中并且“找不到”,则会显示标题。如果是。这很有效。

我按照简单的ajax请求的parsley.js自定义验证器示例中的示例。

会发生什么:如果我输入“已注册的”#39;地址,我得到相应的错误信息。如果我然后去修改该地址为一个我知道没有注册并选项卡或鼠标指向下一个字段,错误消息消失,但提交按钮不起作用。为了使情况更加复杂,如果我加载并填写一份未注册的表格。地址,提交按钮也不起作用。看来执行自定义验证器会在输入时禁用提交。

我已经玩了好几个小时,尝试各种各样的事件操作,但没有任何作用。

我应该指出,如果d_type的检查值(参见上面的字段定义)不是&#39; S&#39;,那么一切都按预期工作。

我完全不知道为什么跟踪文档导致失败。

1 个答案:

答案 0 :(得分:0)

事实证明,这对欧芹来说根本不是问题。

一位同事创建了表单,提交按钮的id为“submit”,不允许欧芹解析提交处理程序。在这种情况下,显然欧芹会阻止提交。

谁知道?

现在,我们知道......