Jquery Ajax验证在提交时不起作用

时间:2010-01-11 12:09:24

标签: jquery ajax validation forms

我对Jquery有一点问题,并想知道是否有人可以提供帮助

我有一个表单,我正在验证模糊

$('form#setAdminUser :input').blur(function () {
var $item = $(this);
var $itemWrapper = $(this).parent();
$itemWrapper.find('input').removeClass('errorRow').end()
.find('span').remove();

 // There are other validation rules here I have ommitted..

// Email validation
if (this.id == 'sEmail') {

 // Email Unique
 if (this.value != '') {
 var errorMessage = 'Checking availability';
 var emailData = {sEmail: itemValue}
 $.getJSON('http://localhost:8501/ems/trunk/www/cfcs/admin_user_service.cfc?method=getAdminUser&returnFormat=json&queryformat=column', emailData,      
 function(data){

                        if (data != false) {
                            var errorMessage = 'This email address has already been registered';
                            $itemWrapper.find('span').text(errorMessage).addClass('errorInfoFalse').removeClass('errorInfoTrue');
                            $item.addClass('errorRow');
                        }
                        else {
                            var errorMessage = 'Good';
                            $itemWrapper.find('span').text(errorMessage);
                            $item.removeClass('errorRow');
                        }
                    })
                }
            }

这很好用,并检查表单中添加的电子邮件地址是否已在数据库中。如果是这样,则显示错误,如果没有进展。

然后我通过触发验证字段上的模糊,在表单提交上再次调用此验证。

$('#setAdminUser').submit(function(){
                $('#submitMessage').remove();
                $(':input.conditional').trigger('blur');
                $(':input.text_field').trigger('blur');

                var numWarnings = $('.errorRow',this).length;
                if (numWarnings) {
                   // Show error messages

                }
                else {
                  // Everything is fine, create User

                }
            return false
    })

如果任何其他字段无效,而电子邮件字段无效,例如密码太短或字段留空,则在提交表单时,将调用on blur验证。显示所有错误,包括电子邮件,并且未创建用户。

但是,如果电子邮件字段无效,则不会显示错误并创建用户。我猜这是因为电子邮件验证是一个ajax调用,这发生得太慢了?有任何想法吗?感谢

1 个答案:

答案 0 :(得分:2)

AJAX调用是异步进行的,当您为输入手动触发blur事件时,submit事件将不会等待它们。您应该做的是在提交事件中进行另一个AJAX调用,在该事件中将所有输入值传递给要验证的脚本,然后检查回调中验证的状态。如果它已经过验证,那么提交表格,基本上就是这样:

var isValid = false;
$('#setAdminUser').submit(function() {
    if (isValid) {
        return true;
    }

    var data = $(this).serialize();
    $.getJSON('/validate/data', data, function(status) {
        if (status) {
            isValid = true;
            $('#setAdminUser').submit();
        }
    });
    return false;
});