1 Востаннє редагувалося Bygryn (27.09.2017 21:14:46)

Тема: Затримка перед виконанням функції, без черги

Яким чином можна реалізувати затримку перед виконанням ф-ції без утворення черги, тобто якщо я натисну клавішу декілька разів підряд, функція виконається лише при останньому натиску.

$('#foo').keyup(function(){
        function too() {
             ...
        }
});
Подякували: 221VOLT, Monolith2

2 Востаннє редагувалося FakiNyan (27.09.2017 21:49:52)

Re: Затримка перед виконанням функції, без черги

створіть змінну. що буде тримати останній час спрацьовування функції, в функції порівнюйте поточний час з тим, що в функції, якщо воно менше деякої визначеної вами паузи, то просто запам'ятайте поточний час і виходьте з функції
хоча нє, це ж воно тоді лише перший раз виконається

тут спілкуються українці, про політику, і інше (серед них є програмісти, але дуже мало, тому не заходьте туди лише з питаннями про програмування)
https://discord.gg/Zk29v4P
Подякували: Bygryn, 221VOLT, Monolith3

3 Востаннє редагувалося bvn (27.09.2017 22:29:18)

Re: Затримка перед виконанням функції, без черги

Треба запам'ятовувати час натискання і у функції, що запускається після таймауту визначати, якщо після останнього натискання не пройшов заданий час, скіпати...

Подякували: koala, Bygryn, 221VOLT, Monolith4

4

Re: Затримка перед виконанням функції, без черги

Дякую, реалізував наступним чином:

Прихований текст

$('#foo').on('keyup',function(e){
        elm=$(this);
        time=(new Date()).getTime();
        delay=500;

        elm.attr({'keyup':time});
        elm.off('keydown');
        elm.off('keypress');
        elm.on('keydown',function(e){$(this).attr({'keyup':time});});
        elm.on('keypress',function(e){$(this).attr({'keyup':time});});

        setTimeout(function(){
            oldtime=parseFloat(elm.attr('keyup'));
            if (oldtime<=(new Date()).getTime()-delay & oldtime>0 & elm.attr('keyup')!='' & typeof elm.attr('keyup')!=='undefined'){
                value = $( "#foo" ).val();
                if (value) {
                    function too() {
                     ...
                    }
                }
                elm.removeAttr('keyup');
            }
        },delay);
    });

Подякували: Monolith1