版权属于:
Hello World
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
正常情况下,js对文本框控件正常的监听是这样子的。
// 对id为 #content 的控件添加文本修改事件
$(document).on("input propertychange","#content",function(res){
var newValue = $("#content").val();
console.log(newValue)
});
可以正常监听文本的变化。但是,太过灵敏了,某些情况下可能不适合。
比如这样一个需求:网页有一个实时同步功能的文本框,文本框内的数据需要实时发送到服务器存储,以便下一次展现。
在打字的情况下,每按下一个字母,都会触发一次文本修改。如果修改监听的回调函数里面是向服务器发送请求的话,即使用户在正常的字的情况下,对服务器来说像是遭受CC攻击了一样,频率太快了。
所以,我对代码进行了改进,时间精度换性能。
var n = 0;
$(document).on("input propertychange", "#content", function(res){ // 设置文本框监听
var nn = ++n;
setTimeout(function(){
if (n != nn) return;
UpData();
}, 1000);
});
通过对比文本修改次数来判断需不需要向服务器发送数据。上面代码中定义了两个变量,一个变量n在外面记录 回调函数 文本变化的次数;另一个临时变量nn记录在 回调函数 执行的那一刻文本变化次数。在 回调函数 里用setTimeout来定时2秒执行一个函数,1秒后,如果内外两个记录文本修改次数的变量相同,则向服务器发送数据,否则直接结束本次执行。
如此循环往复,当用户真正停下来,或者用户暂停撰写时,才往服务器发送本次修改的文本。虽然文本不是真正的实时发送,但是慢一两秒对这个需求来说不是很重要。所以说是时间换性能。
评论 (0)