学完一本讲javascript的书,做了个google suggest效果的例子,效果是出来了,请求的速度也快,但是写方法时是把控件的id写到方法里了,几个方法之间有相互调用,所以一个页面上只能有一个文本框有这种效果,后来把几个方法写到一个function中,定义成一个类,然后在页面上实例个对象,用对象方法来执行,但是速度非常慢,得等好长时间,不知道为什么?如果不是这样封装的话,又怎么实现呢?希望高手指点迷津!!
问题补充:
没封装前的JS方件:
var arrOptions=new Array();
var strLastValue="";
var theTextBox;
var currentValueSelected=-1;
var req;
//添加ID为spanOutput的span,用来显示提示的项;
window.onload=function(){
var elemSpan=document.createElement("span");
elemSpan.id="spanOutput";
elemSpan.className="spanTextDropdown";
document.body.appendChild(elemSpan);
document.getElementById("form1").txtUserInput.onkeyup=GiveOptions;
}
//根据文本框的内容和用户按下的键来执行相应的改变;
function GiveOptions(){
....根所文本框的情况和有用户按键来做想应操作或请示服务器;其中直接用的是控件的ID;
}
//向服务器发送请求;
function TypeAhead(xStrText)
{
.....向服务器请求数据;
}
.......还有几个方法。
封装后的JS文件:
window.onload=function(){
var elemSpan=document.createElement("span");
elemSpan.id="spanOutput";
elemSpan.className="spanTextDropdown";
document.body.appendChild(elemSpan);
}
function Suggest(id,pUrl)
{
this.tbId=id;
this.pageUrl=pUrl;
var arrOptions=new Array();
var strLastValue="";
var theTextBox;
var currentValueSelected=-1;
var req;
//根据文本框的内容和用户按下的键来执行相应的改变;
this.GiveOptions=function(){
....;内容同上; 其中用了传进来的参数来引用文本框;
}
......其他方法
} ; 定义了一个Suggest类;是为了让每文本框应用这种效果;
页面中的调用:
<script type="text/javascript">
var tbin=new Suggest("txtUserInput","SelectData.aspx");</script>
<input type="text" name="txtUserInput" id="txtUserInput" onkeyup="tbin.GiveOptions()"/>
这样后速度就慢了。
1.做测试的数据量不是很大,不到十项.
2.不是第每次都请求数据,比如请示到与"a"匹配的数据后,"aa"的就不请求了。只是首次请求时慢。