Пользователь закончил вводить текст
Всем привет. Делаю autocomplete. Вопрос в следующем: есть input в который пользователь вводит строку для поиска. Соответственно надо поймать тот момент когда пользователь перестал вводить символы но при этом input находится в фокусе. Как это сделать? Может кто делал?
|
Цитата:
Можно только предположить, что если юзер подзавис скажем на пол-секунды, то он перестал вводить текст. И делать автокомплит в это время. var timerId = null; textbox.onkeypress = function() { clearTimeout(timerId); timerId = setTimeout(function() { autoComplete(); }, 500); } |
Спасибо за ответ. Но в таком случае (проверял в IE10) действие будет выполняться несколько раз:
<html> <body> <input onkeypress="test(this);"> <script> function test(e){ var TimeoutID = null; clearTimeout(TimeoutID); TimeoutID = setTimeout(function(){ alert(e.value); },1000); } </script> </body> </html> |
|
Цитата:
|
abar,
решение одно которое предложил danik.js, вариант который я вам указал дополнен ещё и проверкой на наличие хотябы 3 символов в строке поиска -- там основной момент выводить не все ответы сервера а только тот который больше походит на строку поиска в данное время |
рони,
то есть, сколько раз нажал пользователь на кнопку/и столько (в моем примере) и алертов будет. От этого никак не избавиться, кроме как ввести проверку на длину строки. Правильно ли мы поняли друг друга? |
abar, переменная TimeoutID должна быть объявлена вне функции. А так при каждом вызове создается новая переменная, со значением null и clearTimeout(TimeoutID) ни к чему не приводит. То есть ты даже не понимаешь базовых вещей в JavaScript.
Кстати говоря, в js принято называть переменные и функции с маленькой буквы. С большой - только конструкторы. |
danik.js,
я понял, спасибо. Всем спасибо. |
я так решил:
var field = document.querySelector('input'), count = 0; field.addEventListener('input', function (e) { let a = ++count, time = setTimeout(function () { if (a == window.count) { console.log('ввод закончен'); } else { clearTimeout(time); } }, 3000); }); /*при срабытавание события увеличиваем счетчик если по прошествию 3 сек счетчик не поменялся ввод закончен*/ |
Вячеслав Мухин,
а если так? var field = document.querySelector('input'), time; field.addEventListener('input', function (e) { clearTimeout(time); time = setTimeout(function () { console.log('ввод закончен'); }, 3000); }); |
Часовой пояс GMT +3, время: 12:00. |