Javascript:触发几秒钟内发生的事件,但如果发生其他事件,可以取消该事件吗?

时间:2009-11-11 14:11:50

标签: javascript ajax events

免责声明:我不是Javascript专家,所以我甚至不确定我是否正确接近这个......

我希望能够在Javascript中触发事件,但是如果发生其他事件,则能够取消该事件。所以,我想要完成的是:

  • 用户开始在文本框中输入内容。
  • 当文本框内容发生变化时,触发一个进行AJAX调用的事件
  • 但是,如果用户继续输入,请取消该事件,因为我不想在完成输入后再进行查询

即。如果用户输入“foobar”,我不想在完成输入之前进行AJAX搜索。我没有理由这样做:

AJAX( “F”) 然后 AJAX( “FO”) 然后 AJAX( “富”) 然后 AJAX( “foob”) ......

当我完成打字时,我可以完成一个电话 AJAX( “foobar的”)

......我有道理吗?或者有更好的方法来解决这个问题吗?

哦,然后是踢球者:我想避免使用JQuery / Prototype,并且只使用直接的javascript来执行此操作...是的!

3 个答案:

答案 0 :(得分:3)

你想在keypress上做什么

if(myTimeout)
   window.clearTimeout(myTimeout);

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

答案 1 :(得分:2)

如果您不想使用框架,您可能需要查看独立的AJAX库Matt Kruse's

我认为可以中止AJAX请求。但是,启动和中止每个按键的请求对我来说听起来很可怕。

我会采取不同的方式:

  • 在发出请求之前等待一段时间(检查输入值是否从那时起发生了变化,如果没有,请提出请求)

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

答案 2 :(得分:0)

类似的东西:

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
}