Javascript 在jQuery中自动保存textarea字段

Javascript 在jQuery中自动保存textarea字段,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我想请求一些使用Ajax保存记事本数据的帮助。在我的例子中,记事本是一个简单的文本区域,我们可以为它捕获onchange事件 HTML 上面的代码非常适合我需要做的事情。然而,在实践中,我发现上面的代码并不适合这个场景,因为很多内容都会经过这个文本区域,每个keyup/change都有一个ajax调用,这就是很多ajax和MySQL调用 我希望得到帮助,弄清楚如何在文本更改完成后才触发Ajax调用。我的第一反应是给ajax调用增加延迟,但这仍然意味着在一定的时间之后会有很多ajax调用 有没有办

我想请求一些使用Ajax保存记事本数据的帮助。在我的例子中,记事本是一个简单的文本区域,我们可以为它捕获onchange事件

HTML

上面的代码非常适合我需要做的事情。然而,在实践中,我发现上面的代码并不适合这个场景,因为很多内容都会经过这个文本区域,每个keyup/change都有一个ajax调用,这就是很多ajax和MySQL调用

我希望得到帮助,弄清楚如何在文本更改完成后才触发Ajax调用。我的第一反应是给ajax调用增加延迟,但这仍然意味着在一定的时间之后会有很多ajax调用

有没有办法让我把Ajax调用完全保留到最后?这可能是用户完成向文本区域添加内容后的5秒


注意:添加提交按钮不是一个选项。

请尝试通过jQuery更改您正在侦听的事件“更改粘贴键控”都是不同的事件。试着把“钥匙”拿出来,留下另外两个

这是最简单的答案

另一个更复杂的选项是添加一个计时器,将ajax延迟到一定时间

$('#notepad').on('change paste keyup', function(event) {
  var formData = $(this).serialize();
  setTimeout(function(){

    $.ajax({
      url: url,
      type: 'POST',
      data: formData,
      success: function(data, status) {
          console.log('Something worked');
      },
      error: function(xhr, desc, err) {
          console.log('Something went wrong');
      }
    });
  }, 3000);
}
两个注意事项:我将formData变量保留在超时之外,因为它在匿名函数中的作用不同。另一个选项是将其保存到另一个变量,然后在超时内序列化表单数据

var thisForm = $(this)
setTimeout(function(){
  var formData = thisForm.serialize()
最后,3000是触发超时所需的事件触发后的时间(毫秒)


也可以使用const或let代替var。请参见和

这是否回答了您的问题@谢谢你。真不敢相信事情竟然那么简单。不管发生什么事。我试图实现的是延迟Ajax调用,直到用户完成对字段的输入。这意味着ajax应该在一定时间后只触发一次。我会修改我的答案,加入另一个选项。如果A.Meshu的答案对你更有效,那就好了。我不太使用jQuery,所以我可能不应该在这里插上我的鼻子P
$('#notepad').on('change paste keyup', function(event) {
  var formData = $(this).serialize();
  setTimeout(function(){

    $.ajax({
      url: url,
      type: 'POST',
      data: formData,
      success: function(data, status) {
          console.log('Something worked');
      },
      error: function(xhr, desc, err) {
          console.log('Something went wrong');
      }
    });
  }, 3000);
}
var thisForm = $(this)
setTimeout(function(){
  var formData = thisForm.serialize()