加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:02:01 所属栏目:百科 来源:网络整理
导读:像百度、Google等搜索引擎在搜索框中输入一些内容后,在搜索框下方会出现一个包含很多匹配信息的提示框。这些推荐关键字极大的方便了我们的搜索,因为我们有时候使用的关键字并非很合适,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的开头位置找到了输入的字符串。
效果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读