@ruslanbm29

Как вызвать функцию с задержкой пока пользователь вводит текст?

Здравствуйте что бы не грузить браузер и сервер, необходимо откладывать выполнение функции пока пользователь не введет текст.
Мне кое что удалось - вот это работает (Функцию Delay() взял из интернета):
$(document).on('ready', function(){
notebook_counts('#notebook');
}
function notebook_counts(myObject) {
var delaytime=300;
$(myObject).keyup(delay(function () {
    	notebook_counts_handler(myObject);
}, delaytime));
}

function delay(callback, ms) {
	var timer = 0;
	return function() {
    var context = this, args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      	callback.apply(context, args);
    }, ms || 0);
  };
}


Но как быть если во время работы страницы Delaytime нужно изменить. Например пользователь может вручную задать задержку если текст большой? Ниже код, параметр "delaytime" я получаю правильно в консоль выводит нужную цифру. Но даже если delaytime=5000 (5 секунд) - скрипт всеравно отрабатывает без задержки т.е вызывает функцию notebook_counts_handler()...
function notebook_counts(myObject) {
    $(myObject).on('keyup', function () {
        var delaytime=1;
        if($.session.get('delaytype')=='manualdelay') delaytime=$('#delaytime').val();
        else if($.session.get('delaytype')=='autodelay') delaytime=1000;
        
		console.log(delaytime);
        
        delay(notebook_counts_handler('#notebook'),delaytime);
    });
}

Я пробывал разные варианты, но либо задержки нет, либо нет возможности ее изменить пользователем. Весь день провозился, но поставленную задачу не решил
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 2
@thisuserhatephp
Офлайн - losers Онлайн - lusers
$('.search').on('keyup', function() {

	var $this = $(this);
	var $delay = 500;

	clearTimeout($this.data('timer'));

	$this.data('timer', setTimeout(function(){
            console.log('test n-125');
                 //  ...code
	}, $delay));	
});


UPD - https://jsfiddle.net/65moj9sx/4/
над кодом не заморачивался
Ответ написан
@DrWeyber
Чекни функцию throttling / denounce
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы