Ajax应用――自动补全表单字段(Google Instant)

前端之家收集整理的这篇文章主要介绍了Ajax应用――自动补全表单字段(Google Instant)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

百度、Google等搜索引擎在搜索框中输入一些内容后,在搜索框下方会出现一个包含很多匹配信息的提示框。这些推荐关键字极大的方便了我们的搜索,因为我们有时候使用的关键字并非很合适,Ajax在这里的应用增强了用户体验。相当于弱化的Google Instant(谷歌实时)。

下面的一个例子中,在表单的输入框进行输入时,会显示与输入的字母匹配的美国州名列表。随着用户输入更多的字母,这个列表会逐渐缩短,直到只留下一个州名。然后,这个州名就会自动放进输入字段中,列表消失。
HTML & CSS
 
 
  1. <body>
  2. <formaction="#">
  3. Pleaseenteryourstate:<br/>
  4. <inputtype="text"id="searchField"autocomplete="off">
  5. <divid="popups"></div>
  6. </form>
  7. </body>
注释:autocomplete属性,是HTML 5新属性语法:<input autocomplete="value"> 属性值:on 默认,规定启用自动完成功能;off,规定禁用自动完成。该属性规定输入字段是否应该启用自动完成功能自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的项。autocomplete属性适用于<form>,以及下面的<input>类型CSS <style type="text/css">
 
 
  1. /*为搜索字段和弹出菜单设置样式*/
  2. body,#searchField{
  3. font:1.2emarial,helvetica,sans-serif;
  4. }
  5. .suggestions{
  6. background-color:#fff;
  7. padding:2px6px;
  8. border:1pxsolid#000;
  9. }
  10. .suggestions:hover{
  11. background-color:#69f;
  12. }
  13. #popups{
  14. position:absolute;
  15. }
  16. #searchField.error{
  17. background-color:#FFC;
  18. }
Javascript代码
 
 
  1. window.onload=initAll;
  2. varxhr=false;
  3. varstatesArray=newArray();
  4. functioninitAll(){
  5. //每次击键的事件处理程序为searchSuggest;
  6. document.getElementById("searchField").onkeyup=searchSuggest;
  7. if(window.XMLHttpRequest){
  8. xhr=newXMLHttpRequest();
  9. }elseif(window.ActiveXObject){
  10. xhr=newActiveXObject("Microsoft.XMLHTTP");
  11. }
  12. if(xhr){
  13. xhr.onreadystatechange=setStatesArray;
  14. xhr.open("GET","us-states.xml",true);
  15. xhr.send(null);
  16. }else{
  17. alert("Sorry,butIcouldn'tcreateanXMLHttpRequest");
  18. }
  19. }
  20. functionsetStatesArray(){
  21. if(xhr.readyState==4){
  22. if(xhr.status==200){
  23. //读取每个item节点,寻找其中的label节点,并且存储其firstChild(州名)在数组statesArray中
  24. varallStates=xhr.responseXML.getElementsByTagName("item");
  25. for(vari=0;i<allStates.length;i++){
  26. statesArray[i]=allStates[i].getElementsByTagName("label")[0].firstChild;
  27. }
  28. }else{
  29. alert("Therewasaproblemwiththerequest"+xhr.status);
  30. }
  31. }
  32. }
  33. functionsearchSuggest(){
  34. varstr=document.getElementById("searchField").value;
  35. document.getElementById("searchField").className="";
  36. if(str!=""){
  37. //检测是否输入了信息,如有信息则显示提示
  38. document.getElementById("popups").style.display="block";
  39. document.getElementById("popups").innerHTML="";
  40. //遍历州名数组,并且将当前查看的州名存储在thisState
  41. for(vari=0;i<statesArray.length;i++){
  42. varthisState=statesArray[i].nodeValue;
  43. if(thisState.toLowerCase().indexOf(str.toLowerCase())==0){
  44. //对匹配的州名,创建div,将它的innerHTML设置为州名,并添加onclick处理程序,修改className,
  45. //然后将整个div追加到popupsdiv中。
  46. vartempDiv=document.createElement("div");
  47. tempDiv.innerHTML=thisState;
  48. tempDiv.onclick=makeChoice;
  49. tempDiv.className="suggestions";
  50. document.getElementById("popups").appendChild(tempDiv);
  51. }
  52. }//endoffor
  53. //foundCt为匹配的州的个数,若为0说明用户输入错误,改className;
  54. //若为1则是找到了唯一的匹配,将这个州名放进表单。提示框设为空
  55. varfoundCt=document.getElementById("popups").childNodes.length;
  56. if(foundCt==0){
  57. document.getElementById("searchField").className="error";
  58. }
  59. if(foundCt==1){
  60. document.getElementById("searchField").value=document.getElementById("popups").firstChild.innerHTML;
  61. document.getElementById("popups").innerHTML="";
  62. }
  63. }else{//若没有输入信息,或被用户消去则隐藏提示
  64. document.getElementById("popups").style.display="none";
  65. }
  66. }
  67. //通过点击列表来选择州
  68. functionmakeChoice(evt){
  69. if(evt){
  70. varthisDiv=evt.target;
  71. }else{
  72. varthisDiv=window.event.srcElement;
  73. }
  74. //将选中的列表项填入输入框,并去除列表
  75. document.getElementById("searchField").value=thisDiv.innerHTML;
  76. document.getElementById("popups").innerHTML="";
  77. }
注释:searchSuggest函数中的“if(thisState.toLowerCase().indexOf(str.toLowerCase()) == 0)”,我们要检查用户到目前位置输入的内容是否为某个州名的一部分, 但是,仅仅这样还不行,还必须确保输入的内容位于州名的开头。比如你输入了,Kansas,你并不希望下拉框中显示Arkansas或Kansas。 如果indexof()返回0,则说明在thisState的开头位置找到了输入的字符串。
效果

猜你在找的Ajax相关文章