Как запустить код JavaScript внутри диалога jquery - PullRequest
1 голос
/ 21 октября 2011

Я открываю диалоговое окно jquery, оно открывается очень хорошо, содержимое этого диалогового окна является формой, один из входных данных этой формы:

<input onkeyup="testOnKeyUp();" type="text" name="userName" id="userName">

Вот, где моя проблема, когдакто-то вводит ключ в этом поле ввода, следующий код активирован и должен работать, но он просто не работает.

var validateUserNameSpan = $j('#userNameSpan');

function testOnKeyUp(){
validate(this, validateUserNameSpan, 'username');
}

function validate(field, span, property) {

if (field.value != field.lastValue) {
if (field.timer) clearTimeout(field.timer);

field.timer = setTimeout(function () {
    span.value = "";
    span.removeClass('error').html('checking ...');
    $j.ajax({
        url: '/signup/'+property,
        data: property + '=' + field.value,
        dataType: 'json',
        type: 'post',
        success: function (json) {
            updateMessage(span, json.success, json.message);
            if(property=="email"){
                emailValid = true;
            }else if(property=="username"){
                userNameValid = true;
            }
        },
        error: function() {
            ajFailureInitSignup(span);
            if(property=="email"){
                emailValid = false;
            }else if(property=="username"){
                userNameValid = false;
            }
        }
    });
}, 400);


if(userNameValid && emailValid) document.getElementById('buttonLink').onclick=null ;

field.lastValue = field.value;
}
}

Что я делаю не так?

Не знаю, ноgoogling У меня есть информация, которая заставляет меня чувствовать, что:

$j.ajax({

, который я запускаю внутри этого диалога (функция проверки), не выполняется, почему я так говорю?поскольку этот диалог создается в DOM и после его создания этот $ j.ajax не выполняется.

это правда?

Я действительно благодарен за любую помощь.

1 Ответ

0 голосов
/ 21 октября 2011

Хорошо, основная проблема в том, что ваш вызов AJAX возвращает НЕМЕДЛЕННО после того, как вы его выпустите - это нормально (это первое 'A' в ajax - асинхронное).Это означает, что ваш код сразу переходит к разделу кода if (usernamevalid && emailvalid).Эти переменные еще не существуют, поскольку вызов AJAX еще не возвращен.Таким образом, вы сравниваете неопределенные переменные, которые также не пройдут.

Вы должны переместить это сравнение в ваши обработчики успеха / ошибок ajax, чтобы сравнение было выполнено только тогда, когда вызов ajax действительно произвел данные, которыеможно сравнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...