Как отложить обработчик .keyup (), пока пользователь не перестанет печатать?

Это даже работает в сущности JPA:

private String json;

@JsonRawValue
public String getJson() {
    return json;
}

public void setJson(final String json) {
    this.json = json;
}

@JsonProperty(value = "json")
public void setJsonRaw(JsonNode jsonNode) {
    setJson(jsonNode.toString());
}
596
задан Sebastian Simon 24 January 2017 в 13:07
поделиться

4 ответа

Я использую эту небольшую функцию для той же цели, выполняя функцию после того, как пользователь перестал печатать в течение определенного времени или в событиях, которые срабатывают с высокой частотой, например изменение размера :

 задержка функции (обратный вызов, мс) {var timer = 0; функция возврата () {var context = this, args = arguments; clearTimeout (таймер); timer = setTimeout (function () {callback.apply (context, args);}, мс || 0); }; } // Пример использования: $ ('# input'). Keyup (delay (function (e) {console.log ('Time elapsed!', This.value);}, 500)); 
                    
1072
ответ дан 22 November 2019 в 21:58
поделиться

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

0
ответ дан 22 November 2019 в 21:58
поделиться

Используйте

mytimeout = setTimeout( expression, timeout );

, где выражение - это сценарий для запуска, а тайм-аут - время ждать в миллисекундах перед запуском - это НЕ вызывает беспокойства у скрипта, а просто задерживает выполнение этой части до истечения тайм-аута.

clearTimeout(mytimeout);

сбрасывает / очищает тайм-аут, поэтому он не запускает скрипт в выражении (например, отмена ), пока он еще не был исполнен.

2
ответ дан 22 November 2019 в 21:58
поделиться

Если вы хотите выполнить поиск после того, как тип будет готов, используйте глобальную переменную для хранения тайм-аут, возвращенный вашим вызовом setTimout , и отмените его с помощью clearTimeout , если он еще не произошел, чтобы тайм-аут не срабатывал, кроме последней клавиши event

var globalTimeout = null;  
$('#id').keyup(function(){
  if(globalTimeout != null) clearTimeout(globalTimeout);  
  globalTimeout =setTimeout(SearchFunc,200);  
}   
function SearchFunc(){  
  globalTimeout = null;  
  //ajax code
}

Или с анонимной функцией:

var globalTimeout = null;  
$('#id').keyup(function() {
  if (globalTimeout != null) {
    clearTimeout(globalTimeout);
  }
  globalTimeout = setTimeout(function() {
    globalTimeout = null;  

    //ajax code

  }, 200);  
}   
59
ответ дан 22 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: