Это даже работает в сущности 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());
}
Я использую эту небольшую функцию для той же цели, выполняя функцию после того, как пользователь перестал печатать в течение определенного времени или в событиях, которые срабатывают с высокой частотой, например изменение размера
:
задержка функции (обратный вызов, мс) {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));
Обратите внимание на плагин автозаполнения . Я знаю, что он позволяет указать задержку или минимальное количество символов. Даже если вы не воспользуетесь плагином, просмотр кода даст вам несколько идей о том, как реализовать его самостоятельно.
Используйте
mytimeout = setTimeout( expression, timeout );
, где выражение - это сценарий для запуска, а тайм-аут - время ждать в миллисекундах перед запуском - это НЕ вызывает беспокойства у скрипта, а просто задерживает выполнение этой части до истечения тайм-аута.
clearTimeout(mytimeout);
сбрасывает / очищает тайм-аут, поэтому он не запускает скрипт в выражении (например, отмена ), пока он еще не был исполнен.
Если вы хотите выполнить поиск после того, как тип будет готов, используйте глобальную переменную для хранения тайм-аут, возвращенный вашим вызовом 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);
}