免责声明:我不是Javascript专家,所以我甚至不确定我是否正确接近这个......
我希望能够在Javascript中触发事件,但是如果发生其他事件,则能够取消该事件。所以,我想要完成的是:
即。如果用户输入“foobar”,我不想在完成输入之前进行AJAX搜索。我没有理由这样做:
AJAX( “F”) 然后 AJAX( “FO”) 然后 AJAX( “富”) 然后 AJAX( “foob”) ......
当我完成打字时,我可以完成一个电话 AJAX( “foobar的”)
......我有道理吗?或者有更好的方法来解决这个问题吗?
哦,然后是踢球者:我想避免使用JQuery / Prototype,并且只使用直接的javascript来执行此操作...是的!
答案 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
}