Пользователь закончил вводить текст
Всем привет. Делаю 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 сек счетчик не поменялся ввод закончен*/
|
| Часовой пояс GMT +3, время: 02:08. |