Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Запуск функции после setTimeout() [дубликат]

#javascript #jquery


        
             
                
                    
                        
                            This question already has an answer here:
                            
                        
                    
                
                        
                            Начало выполнения функции по таймеру бездействия
                                
                                    (1 ответ)
                                
                        
                                Закрыт 1 год назад.
            
                    
Есть строка поиска. Хочу чтобы при окончании ввода в строку через секунду запускалась(1
раз) функция. Есть код:

$('.block input[name=search]').on("input", function () {
    setTimeout(findUser, 1000);

    function findUser() {
        alert("Hello");
    }

})


Код работает неправильно. Он запускает функцию столько раз сколько я нажму, а мне
нужно при окончании ввода и 1 раз.
Если есть свои варианты кода то пожалуйста
    


Ответы

Ответ 1



Для того, чтобы таймер срабатывал один, предыдущий таймер должен быть остановлен с помощью функции clearTimeout Для этого нужно сохранить предыдущий таймер в переменную: var timer = null; $('.block input[name=search]').on("input", function () { clearTimeout(timer); timer = setTimeout(findUser, 1000); function findUser() { alert("Hello"); } })

Ответ 2



В первую очередь, необходимо определиться с понятием окончание ввода. Допустим, это отсутствие ввода некоторое время. Тогда мы можем отменять старое ожидание и запускать новое при каждом событии ввода. Получится что-то вроде: var th; $('.block input[name=search]').on("input", function () { if (th) clearTimeout(th); th = setTimeout(findUser, 1000); function findUser() { alert("Hello"); th = null; } });

Комментариев нет:

Отправить комментарий