2010-01-11 76 views
0

因与jQuery的一个小问题,不知道是否有人能帮助jQuery的AJAX验证不运作提交

我有一个表格,其中我对模糊

$('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 
    }) 

如果任何其它字段是无效的,而电子邮件字段是无效的,例如密码太短,或字段留空,则提交表单时,在上模糊验证调用。显示所有错误,包括电子邮件,并且用户不被创建。

然而,如果仅电子邮件字段是无效的,误差不显示和用户创建。我猜这是因为电子邮件验证是一个Ajax调用,这发生得太慢了?有任何想法吗?谢谢

回答

2

AJAX调用是异步进行的,当您为输入手动触发模糊事件时,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; 
}); 
+0

酷,感谢您的解释,我认为这可能是Ajax调用这是造成问题的原因。将改变代码以包含此内容。 – namtax 2010-01-11 14:30:50

+0

刚刚意识到这个选项的问题。当我提交表单时,如果从getJSON验证返回任何错误,那么如何将其显示给用户? – namtax 2010-01-11 17:23:36

+0

您应该返回JSON中的错误消息。基本上是这样的: {“errors”:{“email”:[“无效的电子邮件地址。”,“另一个验证错误。”],“other_field”:[“Some error。”}} – 2010-01-12 07:31:24