Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2013, 12:24
Новичок на форуме
Отправить личное сообщение для abar Посмотреть профиль Найти все сообщения от abar
 
Регистрация: 18.12.2013
Сообщений: 7

Пользователь закончил вводить текст
Всем привет. Делаю autocomplete. Вопрос в следующем: есть input в который пользователь вводит строку для поиска. Соответственно надо поймать тот момент когда пользователь перестал вводить символы но при этом input находится в фокусе. Как это сделать? Может кто делал?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2013, 13:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от abar
Соответственно надо поймать тот момент когда пользователь перестал вводить символы
Это невозможно. Ибо нельзя заглянуть в мысли пользователя и узнать - был ли последний введенный символ действительно последним. Сечешь?
Можно только предположить, что если юзер подзавис скажем на пол-секунды, то он перестал вводить текст. И делать автокомплит в это время.


var timerId = null;
textbox.onkeypress = function() {
    clearTimeout(timerId);
    timerId = setTimeout(function() {
        autoComplete();
    }, 500);
}
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2013, 14:38
Новичок на форуме
Отправить личное сообщение для abar Посмотреть профиль Найти все сообщения от abar
 
Регистрация: 18.12.2013
Сообщений: 7

Спасибо за ответ. Но в таком случае (проверял в 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>
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2013, 15:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

abar,
.keyup() задержка и отправка одного запроса после нескольких нажатий
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2013, 15:32
Новичок на форуме
Отправить личное сообщение для abar Посмотреть профиль Найти все сообщения от abar
 
Регистрация: 18.12.2013
Сообщений: 7

Сообщение от рони Посмотреть сообщение
abar,
.keyup() задержка и отправка одного запроса после нескольких нажатий
Там же не нашли решение? Просто повесили событие на нажатия enter или изменение фокуса.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2013, 15:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

abar,
решение одно которое предложил danik.js,
вариант который я вам указал дополнен ещё и проверкой на наличие хотябы 3 символов в строке поиска -- там основной момент выводить не все ответы сервера а только тот который больше походит на строку поиска в данное время
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2013, 15:49
Новичок на форуме
Отправить личное сообщение для abar Посмотреть профиль Найти все сообщения от abar
 
Регистрация: 18.12.2013
Сообщений: 7

рони,
то есть, сколько раз нажал пользователь на кнопку/и столько (в моем примере) и алертов будет. От этого никак не избавиться, кроме как ввести проверку на длину строки. Правильно ли мы поняли друг друга?
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2013, 16:07
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

abar, переменная TimeoutID должна быть объявлена вне функции. А так при каждом вызове создается новая переменная, со значением null и clearTimeout(TimeoutID) ни к чему не приводит. То есть ты даже не понимаешь базовых вещей в JavaScript.

Кстати говоря, в js принято называть переменные и функции с маленькой буквы. С большой - только конструкторы.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2013, 16:16
Новичок на форуме
Отправить личное сообщение для abar Посмотреть профиль Найти все сообщения от abar
 
Регистрация: 18.12.2013
Сообщений: 7

danik.js,
я понял, спасибо.
Всем спасибо.
Ответить с цитированием
  #10 (permalink)  
Старый 14.09.2017, 10:13
Новичок на форуме
Отправить личное сообщение для Вячеслав Мухин Посмотреть профиль Найти все сообщения от Вячеслав Мухин
 
Регистрация: 14.09.2017
Сообщений: 1

я так решил:
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 сек счетчик не поменялся ввод закончен*/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема со scroll Chrome Элементы интерфейса 2 21.10.2013 14:46
прогкрутка к якорям cOAPerator Общие вопросы Javascript 20 27.08.2013 03:30
нужно заставить одновременно работать слайдер и модальное окно обратной связи kvant355 Javascript под браузер 3 22.07.2013 16:34
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03