2010-01-11 4 views
0

Есть небольшую проблему с Jquery и интересно, если кто-то могут помочьJquery Ajax проверка не работает на Submit

У меня есть форма, которая я проверяющая на размытости

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

Это прекрасно работает, и проверяет, добавлены ли в эту базу адреса электронной почты, добавленные в форму. Если это так, отображается ошибка, если не все будет развиваться.

Затем я снова вызываю эту проверку на форме submit, вызывая размытие полей проверки.

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

Если какая-либо из других полей недействительны в то время как поле электронной почты является недействительным, например, пароль слишком коротким, или поля оставить пустыми, когда форма была отправлена, проверка на размытости называется. все ошибки отображаются, включая электронную почту, и пользователь не создается.

Однако, если только поле электронной почты недействительно, ошибки не отображаются, и пользователь создан. Я предполагаю, что это потому, что проверка подлинности электронной почты является аякс-вызовом, и это происходит слишком медленно? Есть идеи? Спасибо

ответ

2

Вызов AJAX выполняется асинхронно, когда вы запускаете событие размытия вручную для входов, событие отправки не будет ждать их. То, что вы должны делать, это сделать еще один вызов 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

Круто, спасибо за объяснение, я думал, что это может быть Аякса вызов, который вызывает проблемы. Будет изменен код, чтобы включить это. – namtax

+0

Только что поняли проблему с этим вариантом. Когда я отправляю форму, если есть какие-либо ошибки, возвращаемые с помощью проверки getJSON, как я могу показать это пользователю? – namtax

+0

Вы также должны возвращать сообщения об ошибках в JSON. В основном что-то вроде: {"errors": {"email": ["Неверный адрес электронной почты.", "Другая ошибка проверки."], "Other_field": ["Some error."}}} –

Смежные вопросы