`

JavaScript学习笔记8--一个文字自动匹配的例子

 
阅读更多

今天练习了一下用javascript做文字自动匹配的功能,类似于Google Suggest,当然人家
Google是连接后台数据库,在网上不方便做连接数据库,所有功能在前台实现。
在javascript里定义了一个全局数组arrCities用来存储一些城市的名字。然后当我们在
文本输入框里输入某个城市的名字的时候,每输入完一个字,就会拿当前的文字到arrCities
数组里去比对,看是否存在于arrCities的某个成员里。若存在,就把该成员添加到紧靠文本
输入框下面的组合列表框里,供我们选择,这样我们就不用完全输入完整个城市的名字,只要
从下面选择一个就可以完成想要做的工作。看下面的例子:

<html>
<head>
<title>AutosuggestExample</title>
<scripttype="text/javascript">
vararrCities=["北京","上海","合肥","南京","哈尔滨","乌鲁木齐","广州","重庆","深圳",
"大连","呼和浩特","长春","西安","沈阳","杭州","香港","台北","澳门",
"齐齐哈尔","安庆","成都","南昌","无锡","苏州","郑州","石家庄","长沙",
"南宁","福州","拉萨","昆明","大庆","武汉"];
arrCities.sort();
//控制是否显示层div1,bFlag为true则表示显示div1,为false则把div1从页面流里移除
functionshowDiv1(bFlag){
varoDiv=document.getElementById("div1");
if(bFlag){
oDiv.style.display
="block";
}
else{
oDiv.style.display
="none";
}
};
//给sel1添加option
functionaddOption(oListbox,sText){
varoOption=document.createElement("option");
oOption.appendChild(document.createTextNode(sText));
oListbox.appendChild(oOption);
};
//移除一个option
functionremoveOption(oListbox,iIndex){
oListbox.remove(iIndex);
};
//移除所有的option
functionclearOptions(oListbox){
for(vari=oListbox.options.length-1;i>=0;i--){
removeOption(oListbox,i);
}
};
//设置select里的第一个option被选中
functionsetFirstSelected(oListbox){
if(oListbox.options.length>0){
oListbox.options[
0].selected=true;
}
}
//获取匹配的字段
functiongetAutosuggestMatches(sText,arrValues){
vararrResult=newArray;
if(sText!=""){
for(vari=0;i<arrValues.length;i++){
if(arrValues[i].indexOf(sText)==0){
arrResult.push(arrValues[i]);
}
}
}
else{
showDiv1(
false);
}
returnarrResult;
};
//把匹配的字段添加到sel1中
functionaddSuggestOptions(oTextbox,arrValues,sListboxId,oEvent){
varoListbox=document.getElementById(sListboxId);
clearOptions(oListbox);
vararrMatches=getAutosuggestMatches(oTextbox.value,arrValues);
if(arrMatches.length>0){
showDiv1(
true);
for(vari=0;i<arrMatches.length;i++){
addOption(oListbox,arrMatches[i]);
}
setFirstSelected(oListbox);
if(oEvent.keyCode==8){
oTextbox.focus();
}
else{
oListbox.focus();
}
}
};
//获取select里的option到textbox
functiongetSuggestText(oListbox,sTextboxId){
varoTextbox=document.getElementById(sTextboxId);
if(oListbox.selectedIndex>-1){

oTextbox.value
=oListbox.options[oListbox.selectedIndex].text;
}
oTextbox.focus();
showDiv1(
false);
}
//通过Enter键确定选项
functiongetSuggestText2(oListbox,sTextboxId,oEvent){
if(oEvent.keyCode==13){
getSuggestText(oListbox,sTextboxId);
}
}
</script>
</head>
<body>
<p>请输入一个城市的名字:</p>
<p>
<inputtype="text"id="txt1"value=""size="27"
onkeyup
="addSuggestOptions(this,arrCities,'sel1',event)"/><br/>
<divid="div1"style="background-color:white;display:none;">
<selectid="sel1"style="width:202px"size="6"
onclick
="getSuggestText(this,'txt1')"onkeyup="getSuggestText2(this,'txt1',event)">
</select>
</div>
</p>
</body>
</html>

用到的东西都比较基础,主要是动态操纵组合列表框,当然有很多细节性的东西需要注意。
比如说用户选择完一个选项,要注意把组合列表框隐藏。所以这里把组合列表框放在了一
个层上,隐藏和显示控制起来就方便一点。效果如下图:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics