Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Навесить debounce на обработчик нескольких событий (https://javascript.ru/forum/events/44464-navesit-debounce-na-obrabotchik-neskolkikh-sobytijj.html)

Elphet 21.01.2014 01:44

Навесить debounce на обработчик нескольких событий
 
Рабочий код
Срабатывает при вводе в textarea и выбирает автоматом нужный пункт radio.
Но данный код вызывает слишком много срабатываний. То есть radio кликается и запускает функции столько раз сколько ввел символ.

Надо вместо setTimeout повесить debounce.
Пробовал так:
$('input[name=fld7]').keyup($.debounce(handle, 300));

Не вышло.

P.S. Можно попробовать throttle, но думаю он не подойдет, т.к.
будет искажать данные подсчета- Количество символов изменится а функция может не сработать а остаться замороженной.

Выручайте.

kostyanet 21.01.2014 12:05

Цитата:

Сообщение от Elphet
То есть radio кликается и запускает функции столько раз сколько ввел символ.

Потому что keyup. Задержка абсолютно ничего не срезает, а только перемещает в будущее на 2с всё что произошло только что.

Врубите setInterval один раз раз и проверяйте что юзер навводил пока скрипт моргал 2 с.

В любой он-лайн гаме это стандартные способы обеспечить реал-тайм рендер.

Elphet 21.01.2014 14:30

Идея конечно интересная. Но получается, если человек останется на странице, то он вызовет N количество раз функцию. N = время/интервал
Сервер грузить не айс =)

Хотя. Появилась идея сделать совмество с clearInterval... подумаю...

kostyanet 21.01.2014 15:06

Ну тогда сравнивайте что было до и после и, если после == до, прекращайте цикл вплоть до нажатия клавиши.

Elphet 21.01.2014 15:09

нифига... =)))
Как я и говорил сетИнтервал грузит функцию также.
КлеарИнтервал отрубает повтор, но онКейАп по ходу подрубает её заново =)))

Еще варианты?)

на последнее сообщение:

как сравнить что было до и после? Если массив у меня выводится через .html();?

kostyanet 21.01.2014 16:29

Начините уже по-человечески. Не с кодов, а с изложения задачи.

Elphet 21.01.2014 22:08

Цитата:

Сообщение от kostyanet (Сообщение 293291)
Начините уже по-человечески. Не с кодов, а с изложения задачи.

если не понятно - надо спрашивать сразу. А не писать сообщения "давайте уж по-человечески"

Задача еще раз на простом языке:

Ограничить количество вызовов срабатывания функции .onkeyup по времени (после того как человек заполнил инпут прошло 2 сек и выбирается нужный radio, если до 2 сек человек продолжил заполнять, то отсчет 2 сек начинается заново и radio будет выбран как он перестанет заполнять и пройдет 2 сек.) код есть в первом сообщении

Elphet 21.01.2014 22:57

Задача решена с помощью .onclick =)) и добавление невозможности человеку продолжить путь не нажав кнопку))

kostyanet 23.01.2014 11:59

Цитата:

Сообщение от Elphet
Задача еще раз на простом языке:

Не по теме в сдохлой теме. Вы не знаете человеческого языка. Это бяда многих программистов.

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


Часовой пояс GMT +3, время: 05:12.