fredrsf
@fredrsf
Веб-разработчик (Symfony)

Как установить последовательность выполнения событий js?

Использую плагин https://github.com/devbridge/jQuery-Autocomplete для автодополнения текста в input. На странице есть еще один скрытый input, в значение которого по событию автодополнения onSelect кладется айдишник выбранной записи.

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

Как понять что юзер ничего не выбрал?

Я повесил событие на blur инпута, но если юзер выбирает значение из автодополнения, то как раз срабатывает blur, да еще и быстрее, чем onSelect и соответственно форма показывается, хоть и не должна.

Как сделать правильно и установить последовательность выполнения?
  • Вопрос задан
  • 2501 просмотр
Пригласить эксперта
Ответы на вопрос 1
Проверяйте значение с задержкой.
Никогда не пытайтесь сортировать события. Это антипаттерн.
var changedFromSelect = false; //назовите его как хотите
function onBlur() {
  setTimeout(function() {
    if (changedFromSelect) return;

    updateHiddenInput();
    //Показать форму здесь
  }, 50);
}
function onSelect() {
  changedFromSelect = true;
  updateHiddenInput();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы