【发布时间】:2018-04-10 23:01:47
【问题描述】:
我有一个表单,我需要查看输入表单的电子邮件地址是否已经在数据库中。此检查需要根据表单中另一个字段的值有条件地执行。
这是表单域:
<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"}
});
服务器代码很简单,如果地址不在数据库中,则返回“200 OK”标头,如果在,则返回“404 Not Found”。行得通。
对于简单的 ajax 请求,我按照 parsley.js 自定义验证器示例中的示例进行操作。
发生的情况是:如果我输入“注册”地址,我会收到相应的错误消息。如果我然后去将该地址修改为我知道未注册的地址,然后将标签或鼠标移到下一个字段,错误消息就会消失,但提交按钮不起作用。使情况更加复杂的是,如果我加载并填写带有“未注册”地址的表格,则提交按钮也不起作用。似乎执行自定义验证器会在输入时禁用提交。
我已经玩了几个小时,尝试了各种事件操作,但没有任何效果。
我应该指出,如果 d_type 的检查值(参见上面的字段定义)不是“S”,那么一切都会按预期工作。
我完全不明白为什么遵循文档会导致失败。
【问题讨论】:
标签: ajax parsley.js custom-validators