Как отключить несколько запросов на автозаполнение поиска javascript? - PullRequest
0 голосов
/ 23 октября 2018

Я использую Turbolinks.visit действие, через $(document).on("input"); ...

HTML

<form id="mainSearch" method="get" autocomplete="off">
    <input type="search" name="s" placeholder="Search" />
</form>

Javascript

$(document).off().on("input", "#mainSearch", function(e) {

        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();

        var ser     = $(this).serialize();

        setTimeout(function(){
            Turbolinks.visit(
                homeurl+"/?"+ser,
                {
                    change: ['content']
                }
            );
        },110);

        return false;
    });  

Он работает правильно, но событие запускает множественный запрос, когда удерживаете нажатой клавишу.

enter image description here

действуйте, как принять меры предосторожности, чтобы сохранить егонажата?.on("input"

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Возможно, вы ищете https://stackoverflow.com/a/27787793/5523033, так как вы используете JQuery, вы можете использовать $.debounce

, и вот несколько примеров, чтобы поиграться с http://jsfiddle.net/cowboy/cTZJU/

0 голосов
/ 23 октября 2018

Вы забыли отменить предыдущий таймер?

var timer = null;

$(document).off().on("input", "#mainSearch", function(e) {

    e.stopImmediatePropagation();
    e.stopPropagation();
    e.preventDefault();

    var ser= $(this).serialize();

    clearInterval(timer);

    timer = setTimeout(function(){
        Turbolinks.visit(
            homeurl+"/?"+ser,
            {
                change: ['content']
            }
        );
    },110);

    return false;
});  

Редактировать: Вместо того, чтобы заново изобретать колесо, всегда есть хороший выбор для использования существующих решений, $.debounce() - это то, что вы ищете.

...