$("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);
}
}
});
}
我在页面上有几个textareas,我希望他们自动保存用户输入。正在编辑的数据是一组键/值对,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);
});
因此,添加计时器会打破它,autoSave会被调用,但我感觉vars正在丢失它们的值.....可能与变量范围有关。所以这是一个小问题,我可以解决...更重要的是(以及我的帖子的目的),问题:每次按下一个键时,我是否会实例化一个新的计时器对象和一个ajax调用(=数据库命中)?或者如果你反复调用它,setTimeout会重置相同的对象吗?
我想要的是在按下按键后调用autoSave功能一两秒,但只有在此期间没有按下按键...换句话说,如果用户暂停2秒......启动保存功能。
或许有更好的方法可以进行自动保存?
谢谢
感谢
答案 0 :(得分:0)
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);
});