$("textarea").bind("keyup", function () {
var keyName = $(this).attr("data-rkn-keyName");
autoSave(keyName, this.value);
});
function autoSave(key, value) {
$.ajax({
url: "/Admin/SaveLookup",
type: "POST",
data: ("keyName=" + key + "&value=" + value),
success: function (data) {
if (data) {
$('#saved-signal').show().fadeOut(1500);
}
}
});
}
У меня есть несколько текстовых полей на странице, и я бы хотел, чтобы они автоматически сохраняли ввод пользователя. Редактируемые данные представляют собой набор пар ключ/значение, где textarea является значением, а атрибут textarea 'data-rkn-keyName' является ключом.
Таким образом, приведенный выше код работает, но если пользователь быстро печатает, он не поймает последний символ или два. Поэтому я изменил его так:
$("textarea").bind("keydown", function () {
var keyName = $(this).attr("data-rkn-keyName");
var keyValue = $(this).value;
setTimeout(function (keyName, keyValue) {
autoSave(keyName, keyValue);
}, 2000);
});
Таким образом, добавление таймера ломает его, автосохранение вызывается, но у меня такое чувство, что переменные теряют свои значения… возможно, это связано с областью видимости переменных. Так что это незначительная проблема, которую я могу решить ... что более важно (и цель моего поста), вопрос: буду ли я создавать новый объект таймера и вызов ajax (= попадание в базу данных) каждый раз, когда нажимается клавиша? Или setTimeout сбрасывает один и тот же объект, если вы вызываете его повторно?
Я хотел бы вызвать функцию автосохранения через секунду или две после нажатия клавиши, но только если в течение этого времени не нажимается клавиш... другими словами, если пользователь делает паузу в течение 2 секунд... запускает сохранение функция.
Или, может быть, есть лучший способ сделать автосохранение?
благодарю вас
Благодарность