Javascript:触发几秒钟内发生的事件,但如果发生另一个事件,是否能够取消该事件?
免责声明:我不是Javascript专家,所以我甚至不确定我是否正确处理了这个问题 我希望能够在Javascript中触发一个事件,但如果发生另一个事件,则能够取消该事件。因此,我希望实现的是:Javascript:触发几秒钟内发生的事件,但如果发生另一个事件,是否能够取消该事件?,javascript,ajax,events,Javascript,Ajax,Events,免责声明:我不是Javascript专家,所以我甚至不确定我是否正确处理了这个问题 我希望能够在Javascript中触发一个事件,但如果发生另一个事件,则能够取消该事件。因此,我希望实现的是: 用户开始在文本框中键入内容 当textbox内容发生更改时,触发一个发出AJAX调用的事件 但是,如果用户继续键入,请取消该事件,因为我不想在他们完成键入之前执行查询 i、 如果用户正在输入“foobar”,我不想在他们完成输入之前进行AJAX搜索。我没有理由这样做: AJAX(“f”) 然后 AJ
- 用户开始在文本框中键入内容李>
- 当textbox内容发生更改时,触发一个发出AJAX调用的事件
- 但是,如果用户继续键入,请取消该事件,因为我不想在他们完成键入之前执行查询
哦,还有一个问题:我想避免使用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毫秒后再次开始打字。没错,我太苛刻了。删除否决票。然而,您的方法仍然执行许多不必要的函数。在我看来,取消后续按键事件的超时更明智。嗯,“投票太旧,无法更改。”只有在编辑答案时,我才能撤消我的否决票。已编辑。我不确定这种方法是否执行了太多的函数——如果用户停止键入,就会发送请求。如果用户在请求发出时开始键入,是否要中止其中每一项?我赞成一旦开始就让它们运行,而不是中止它们,这是唯一的区别。