Проверка Jjery Ajax не работает при отправке - PullRequest
0 голосов
/ 11 января 2010

У меня небольшая проблема с 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
    })

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

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

1 Ответ

2 голосов
/ 11 января 2010

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

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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...