#javascript #jquery #autosave
#javascript #jquery #автоматическое сохранение
Вопрос:
$("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 "amp;value=" value),
success: function (data) {
if (data) {
$('#saved-signal').show().fadeOut(1500);
}
}
});
}
У меня есть несколько текстовых полей на странице, и я бы хотел, чтобы они автоматически сохраняли вводимый пользователем. Редактируемые данные представляют собой набор пар ключ / значение, текстовая область является значением, а атрибут текстовой области ‘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);
});
Итак, добавление таймера прерывает его, вызывается автосохранение, но у меня такое чувство, что переменные теряют свои значения ….. возможно, что-то связанное с областью видимости переменной. Итак, это небольшая проблема, которую я могу решить … что еще более важно (и цель моего поста), вопрос: буду ли я создавать новый объект timer и вызывать ajax (= попадание в базу данных) при каждом нажатии клавиши? Или setTimeout сбрасывает один и тот же объект, если вы вызываете его повторно?
Я бы хотел вызвать функцию автосохранения через секунду или две после нажатия клавиши, но только если во время этого нажатия клавиш не было нажато time…in другими словами, если пользователь делает паузу на 2 секунды…запустите функцию сохранения.
Или, может быть, есть лучший способ сделать автосохранение?
Спасибо
Спасибо
Ответ №1:
setTimeout
принимает анонимную функцию без каких-либо аргументов. Когда вы включили keyName
и keyValue
в качестве входных аргументов, анонимная функция получит nil для обоих аргументов. Просто удалите аргументы, и значения будут успешно переданы.
$("textarea").bind("keydown", function () {
var keyName = $(this).attr("data-rkn-keyName");
var keyValue = $(this).value;
setTimeout(function () {
autoSave(keyName, keyValue);
}, 2000);
});