就个人而言,我会在0.5秒到1秒的防抖时间内完成此操作。如果用户停止输入一段指定的时间,那么保存操作将被执行。这也相当简单实现:
var debounce = null;
$(document).ready(function() {
$('.field').keydown(function() {
clearTimeout(debounce);
debounce = setTimeout(function(){
// SAVE
}, 500);
});
});
这是对你问题的非代码回答。
没有好的方法来做到这一点。您可以根据X个单词进行更新,也可以每个字符甚至每秒钟进行更新。问题在于连接数量太多了。
这需要大量的资源和带宽,每次保存时都需要使用互联网连接。然后,您面临的问题是要发送什么到数据库?
如何检查数据库已经有什么?您只是重新发送整个内容吗?
这些都是必须回答的问题。但本质上与现在的情况相同...除了您有某种代码(如我提到的字符更改、单词更改、时间更改),然后将整个文本/字段推送到数据库中,或者仅推送它没有的内容。
因此,没有好的方法来做到这一点。如果我必须这样做,我会在本地存储信息。然后,比方说每30秒更新一次,并将仅更改的字符发送到数据库。
onFocusout
上执行自动保存,而不是onChange
。这样当输入框失去焦点时,将减少服务器请求次数。为输入框添加一个类,例如class="autosave"
,然后创建一个失去焦点监听器。$('.autosave').focusout(function(){
autoSave();
});
这里有一个JSFiddle网站的链接: https://jsfiddle.net/fcLuw5p9/