【讨论】实时监听input的输入并异步传输交换数据的优化设计
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<div>请输入关键字:<input id="keyWords" type="text" /></div>
<div id="getSearch"></div>
<script type="text/javascript">
var sInput = $('#keyWords'), timer;
sInput.focus();
sInput.on('input', function () {
clearTimeout(timer);
timer = setTimeout(function () {
$('#getSearch').append('<p>' + $('#keyWords').val() + '</p>');
}, 250);
});
if (document.all) {
$('#keyWords').each(function () {
var that = this;
if (this.attachEvent) {
this.attachEvent('onpropertychange', function (e) {
if (e.propertyName != 'value') return;
$(that).trigger('input');
});
}
})
}
</script>
上面的代码主要是监听用户对文本框的输入情况,可应用在各种ajax数据交换的功能上。
不过由于服务器的性能不同、客户端的环境不同、客户输入速度的不同,可能会有不同的用户体验,对于数据量较大的网站,当用户输入的结果进行异步请求并返回数据的时间可能会比较长,如果用户输入速度较快,可能会导致数据还未返回又再一次的被提交上去,有时会出现页面假死状态。
监听文本框使用setTimeout来延迟程序的执行时间,虽然也是一个不错的办法,但是也会降低一点用户体验,就是感觉返回结果慢了一点。
我的想法是监听用户输入完毕再执行代码,不过要如何监听用户是否输入完毕这个就比较难实现了,或者使用xml数据,不过对数据量大的情况还不是很好解决。
欢迎大家来讨论怎样才能设计出最佳的代码,拥有最佳的用户体验!能够提供案例最好。
input
ajax
优化
监听
------解决方案--------------------都在js里处理还行,每输一个字符就ajax请求这不是个好办法,
想办法看能不能只在js客户端处理
------解决方案--------------------实时的是最差的方案。
输入不是瞬间完成的。
------解决方案--------------------你的代码中哪里有“提交服务器”的部分?
------解决方案--------------------