Javascript:触发几秒钟内发生的事件,但如果发生另一个事件,是否能够取消该事件?

Javascript:触发几秒钟内发生的事件,但如果发生另一个事件,是否能够取消该事件?,javascript,ajax,events,Javascript,Ajax,Events,免责声明:我不是Javascript专家,所以我甚至不确定我是否正确处理了这个问题 我希望能够在Javascript中触发一个事件,但如果发生另一个事件,则能够取消该事件。因此,我希望实现的是: 用户开始在文本框中键入内容 当textbox内容发生更改时,触发一个发出AJAX调用的事件 但是,如果用户继续键入,请取消该事件,因为我不想在他们完成键入之前执行查询 i、 如果用户正在输入“foobar”,我不想在他们完成输入之前进行AJAX搜索。我没有理由这样做: AJAX(“f”) 然后 AJ

免责声明:我不是Javascript专家,所以我甚至不确定我是否正确处理了这个问题

我希望能够在Javascript中触发一个事件,但如果发生另一个事件,则能够取消该事件。因此,我希望实现的是:

  • 用户开始在文本框中键入内容
  • 当textbox内容发生更改时,触发一个发出AJAX调用的事件
  • 但是,如果用户继续键入,请取消该事件,因为我不想在他们完成键入之前执行查询
i、 如果用户正在输入“foobar”,我不想在他们完成输入之前进行AJAX搜索。我没有理由这样做:

AJAX(“f”) 然后 AJAX(“fo”) 然后 AJAX(“foo”) 然后 AJAX(“foob”) ...

当他们打字完毕时,我本可以打一个电话 AJAX(“foobar”)

。。。我说得通吗?还是有更好的方法来解决这个问题


哦,还有一个问题:我想避免使用JQuery/Prototype,而只使用纯javascript来实现这一点。。。是的

你想在按键上做的是

if(myTimeout)
   window.clearTimeout(myTimeout);

var myTimeout = window.setTimeout(function() {
   alert('one second has passed without any keypress');
}, 1000);

如果您不想使用框架,您可能希望像这样查看ta独立AJAX库

我认为可以中止AJAX请求。然而,在每个按键上启动和中止请求对我来说都很可怕

我会走另一条路:

  • 在发送请求之前等待一段时间(检查输入值是否自那时起发生了更改,如果没有,则发出请求)

  • 让每个Ajax请求成功通过,但标记每个请求的输入值。只有当输入的当前值和请求的标记相同时,才执行操作并显示结果。否则,你会悄悄地放弃结果

    • 类似这样的东西:

      var to = null; //the timeout
      function doStuffWithContents(){
         //code that does the ajax goes here
      }
      
      document.getElementById('the_textarea').onkeyup = function(){
        if (to) {
          window.clearTimeout(to);
        }
        to = window.setTimeout("doStuffWithTheContents()",1000); //1000 = one second
      }
      

      我相信你在寻找这个:对不起,但是你的方法会导致太多的请求。超时方法要经济得多。我不得不否决,因为这太麻烦了。我建议暂停。上面的超时解决方案还没有告诉我们如何处理用户在1000毫秒后再次开始打字。没错,我太苛刻了。删除否决票。然而,您的方法仍然执行许多不必要的函数。在我看来,取消后续按键事件的超时更明智。嗯,“投票太旧,无法更改。”只有在编辑答案时,我才能撤消我的否决票。已编辑。我不确定这种方法是否执行了太多的函数——如果用户停止键入,就会发送请求。如果用户在请求发出时开始键入,是否要中止其中每一项?我赞成一旦开始就让它们运行,而不是中止它们,这是唯一的区别。