的JavaScript / jQuery的 - 做一个AJAX请求,当用户键入一个textarea

我有一个textarea,人们输入一些文字(自然),我希望把它使一个AJAX请求时飘飞,获得有关textarea的是关于什么的(像堆栈溢出的相关问题,但对于一些建议文本区域,而不是一个文本输入)。 问题是,我不能这样做在每一个按键一个AJAX请求(它会是无用的,非常消耗资源),我不知道什么是最有效的方法来做到这一点(每X字?每X秒? 或者是其他东西?)。

什么是去这样做的最好方法是什么?

先感谢您。

--------------解决方案-------------

你可以结合了keypress与事件处理程序setTimeout让你发送一个Ajax请求一个设定的时间量按键后,取消,如果另一个按键计时器结束之前发生重启定时器。 假设你已经有ID为“myTextArea”和一个名为Ajax的回调函数,一个textarea doAjaxStuff

function addTextAreaCallback(textArea, callback, delay) {
var timer = null;
textArea.onkeypress = function() {
if (timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout( function() {
timer = null;
callback();
}, delay );
};
textArea = null;
}

addTextAreaCallback( document.getElementById("myTextArea"), doAjaxStuff, 1000 );

另一种方法是使用一个小的jQuery插件叫做bindWithDelay。 它使用了公认的答案具有相同的setTimeout的技术,但处理超时透明地让你的代码是一个小更易于阅读。 源代码可以看出,在github上。

$("#myTextArea").bindWithDelay("keypress", doAjaxStuff, 1000)

我个人使用setInterval将监测textarea的更改只能执行AJAX回调检测做出改变的时候。 每一秒要快而慢就够了。

如果您使用的是underscore.js可以使用防抖功能。

示例(jQuery的用于KEYUP):

$('#myTextArea').keyup(_.debounce(function(){
alert('hello');
}, 500));

如果你有兴趣jQuery的解决方案,jQuery的建议是一个很好的实现。

无感每次都重新发明轮子。

如果您使用的是在工地附近的这个功能很多,不想跟踪所有的setTimeout裁判等的话,我这个打包成可用的插件在这里的。

该插件增加了一些选项,以正常的$就法缓冲和取消先前的Ajax调用。

分类:JavaScript的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.121 (s). 10 q(s)