jQuery $.when/then не ждет при проверке значений

Я хотел бы использовать метод when или then в jQuery для проверки значения, но, похоже, он не работает должным образом. Скрипт работает с аргументом if, но не с when.

$.when($(".myClass").val() !== undefined).then(function(){
   console.log("$(".myClass").val()));
});

Это всегда возвращает undefined. Он не ждет, пока элемент будет иметь значение. Однако это работает с аргументом if.

Любая идея, что не так в приведенном выше коде и как это исправить?


person Andi    schedule 25.08.2017    source источник
comment
$.when является асинхронным   -  person Rafael    schedule 25.08.2017


Ответы (2)


Он не ждет, пока элемент будет иметь значение.

$.when этим не занимается.

Однако это работает с аргументом if.

if тоже не стал бы ждать, пока у него появится значение.

Любая идея, что не так в приведенном выше коде и как это исправить?

Зарегистрируйте обработчик элемента для любых событий, которые вы хотите использовать для запуска проверки значения. Распространенными вариантами являются change и input, но они различаются в зависимости от типа элемента управления. Так, например, чтобы перехватить как change, так и input:

$(".myClass").on("change input", function() {
    console.log($(this).val());
});
person T.J. Crowder    schedule 25.08.2017
comment
Спасибо, но это не работает для моего варианта использования. Функция должна запускаться, как только элемент появляется на экране после обновления страницы (значение изменяется именно в этот момент). Событие загрузки работает, только если кеш пуст. - person Andi; 25.08.2017
comment
@Andi: Затем вы должны опубликовать новый вопрос, показывающий ваш вариант использования (подробно; желательно с минимально воспроизводимым примером использование фрагментов стека [кнопка [<>]], чтобы сделать его работоспособным); люди будут рады помочь (включая меня, если я рядом). Этот вопрос не содержит ничего о появлении элемента и т. д.; на заданный вопрос был дан ответ. - person T.J. Crowder; 25.08.2017

Когда я сталкиваюсь с такими ситуациями, я читаю документацию по функции, которую пытаюсь использовать здесь

в вашем случае вы пытаетесь сделать что-то похожее на:

$(".btn").on("click", function() {
    var value = $(".myClass").val();
    if(value != "")
       console.log(value);

});
person ThunD3eR    schedule 25.08.2017