简化jquery自动保存文本

streamline jquery autosave text

本文关键字:保存 文本 jquery 简化      更新时间:2023-09-26
$("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);
    });

所以,添加计时器打破它,autoSave确实被调用,但我有一种感觉var正在失去他们的值.....可能与变量作用域有关。所以这是我能解决的一个小问题……更重要的是(和我的帖子的目的),问题:我将实例化一个新的计时器对象和ajax调用(=数据库命中),每次按下一个键?或者setTimeout重置相同的对象,如果你反复调用它?

我想要的是调用autoSave函数在按下按键后的一秒钟或两秒钟,但只有当没有按键在那段时间内按下…换句话说,如果用户暂停2秒……启动保存功能

或者有更好的自动保存方式?

谢谢

谢谢

setTimeout接受不带任何参数的匿名函数。当您将keyNamekeyValue作为输入参数时,匿名函数将为这两个参数接收nil。只要去掉参数,值就会成功传递。

$("textarea").bind("keydown", function () {
    var keyName = $(this).attr("data-rkn-keyName");
    var keyValue = $(this).value;
    setTimeout(function () {
        autoSave(keyName, keyValue);
    }, 2000);
});