Подтвердить что ты не робот

Поиск jQuery по мере ввода с помощью ajax

Я пытаюсь создать поиск, в который вы вводите текст в текстовое поле, а onkeyup - это отключить функцию, которая отправит значение поля на страницу и вернет результаты в контейнер div. Проблема в том, что когда кто-то печатает, происходит ужасное отставание. Я думаю, что происходит, что он пытается найти каждое введенное письмо и делает каждый запрос. Как сделать так, чтобы, если я ввожу в поле, подождите 1/2 секунды (500), если ничего не набрано, тогда выполните поиск ajax, но если в этот временной интервал появится другая буква, не даже беспокоиться с запросом ajax. Я набросился на это и не могу понять. Вся помощь приветствуется!

// fired off on keyup
function findMember(s) {
    if(s.length>=3)
        $('#searchResults').load('/search.asp?s='+s);
}
4b9b3361

Ответ 1

Что это будет делать, так это очистить таймаут при каждом нажатии, поэтому, если 1/2 секунды не прошло, функция funt не будет выполнена, а затем снова установите таймер на 500 мс. То есть, нет необходимости загружать большую библиотеку.

  $(document).ready(function() {

    var timeoutID = null;

    function findMember(str) {
      console.log('search: ' + str);
    }

    $('#target').keyup(function(e) {
      clearTimeout(timeoutID);
      //timeoutID = setTimeout(findMember.bind(undefined, e.target.value), 500);
      timeoutID = setTimeout(() => findMember(e.target.value), 500);
    });

  });

Демо: https://jsfiddle.net/zu2L8f0o/

Ответ 2

Автозаполнение jquery ui имеет эту функцию.

http://jqueryui.com/demos/autocomplete/

Если вы не хотите использовать jquery ui, посмотрите исходный код.

Ответ 3

function myFunction(inputText) {
                debugger;
                var inputText = document.myForm.textBox.value;

                var words = new Array();
                var suggestions = "Always", "azulejo", "to", "change", "an", "azo", "compound", "third"];
                if (inputText != "") {
                    for (var i = 0; i < suggestions.length; ++i) {
                        var j = -1;
                        var correct = 1;
                        while (correct == 1 && ++j < inputText.length) {
                            if (suggestions[i].toUpperCase().charAt(j) != inputText.toUpperCase().charAt(j)) correct = 0;
                        }
                        if (correct == 1) words[words.length] = suggestions[i];
                        document.getElementById("span1").innerHTML = words;

                    }
                }

                else {
                    document.getElementById("span1").innerHTML = "";

                }

<p id="demo"></p>
    <form name="myForm">
         <input type="text" name="textBox" onkeyup="myFunction()"/>
         <span id="span1"></span>
    </form>