免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 948 | 回复: 0
打印 上一主题 下一主题

自己实现的auto complete [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览
  1. var xmlHttp;
  2.     var popupdiv;
  3.     var nameTable;
  4.     var nameTableBody;
  5.     var inputfield;
  6.     var otherfield;

  7.     function myinitialization(){
  8.         if(!popupdiv){
  9.             popupdiv = document.createElement("DIV");
  10.             nameTable = document.createElement("TABLE");
  11.             nameTableBody = document.createElement("TBODY");
  12.             
  13.             nameTable.appendChild(nameTableBody);
  14.             popupdiv.appendChild(nameTable);
  15.             document.body.appendChild(popupdiv);
  16.         }
  17.     }

  18.     function setPosition(inputfield){
  19.         if(popupdiv){
  20.             //position

  21.             var end = inputfield.offsetWidth;
  22.      var left = calculateOffsetLeft(inputfield);
  23.      var top = calculateOffsetTop(inputfield) + inputfield.offsetHeight;

  24.      popupdiv.style.display = "block";
  25.      popupdiv.style.border = "black 1px solid";
  26.      popupdiv.style.left = left + "px";
  27.      popupdiv.style.top = top + "px";
  28.             
  29.             popupdiv.style.width = "300px";
  30.             popupdiv.style.height = "200px";
  31.             popupdiv.style.overflowX = "hidden";
  32.             popupdiv.style.overflowY = "auto";
  33.             popupdiv.style.position = "absolute";
  34.             popupdiv.style.backgroundColor = "#FFFAFA";

  35.             nameTable.style.width = "100%";
  36.             }
  37.         }

  38. /*    function sendRequest(){
  39.         inputfield = document.getElementById("inputname");
  40.         myinitialization();
  41.         
  42.         if(inputfield.value.length > 0){
  43.             xmlHttp = new XMLHttpRequest();
  44.             xmlHttp.onreadystatechange = handleStateChange;
  45.             var queryString = "home?inputname=" + escape(inputfield.value);

  46.             xmlHttp.open("POST", queryString, true);
  47.             xmlHttp.send();
  48.         }else{
  49.             clearNames();
  50.             }
  51.         } */

  52. /*    function handleStateChange() {
  53.         if(xmlHttp.readyState == 4) {
  54.             if(xmlHttp.status == 200) {
  55.                 //nameTable.focus();
  56.                 setNames(xmlHttp.respon***ML.getElementsByTagName("emsuser"), inputfield);
  57.                 }else if (xmlHttp.status == 204){
  58.                     clearNames();
  59.                 }
  60.             }
  61.     }*/
  62.     
  63.         function handleStateChange() {
  64.             if(xmlHttp.readyState == 4) {
  65.                 if(xmlHttp.status == 200) {
  66.                     //nameTable.focus();

  67.                     //var inputfield = document.getElementById("associateId");

  68.                     //var otherfield = document.getElementById("associateName");

  69.                     var myusers = xmlHttp.respon***ML.getElementsByTagName("emsuser");
  70.                     if(myusers.length > 0){
  71.                         setNames(myusers, inputfield, otherfield);
  72.                     }
  73.                     else{
  74.                         clearNames();
  75.                     }
  76.                     }
  77.                 }
  78.         }

  79.     function setNames(the_names, inputfield, otherfield) {
  80.         clearNames();
  81.         var size = the_names.length;
  82.         //setOffsets();

  83.         setPosition(inputfield);
  84.         var row, cell, txtNode;
  85.         for (var i = 0; i < size; i++) {
  86.             var empname = the_names[i].getElementsByTagName("empname");
  87.             var empid = the_names[i].getElementsByTagName("empid");
  88.             
  89.              var nextNode = empname[0].firstChild.data + "(" + empid[0].firstChild.data + ")";
  90.              row = document.createElement("tr");
  91.              cell = document.createElement("td");

  92.              row.style.cursor = "pointer";
  93.              //fuck css

  94.              cell.className = "mytd";

  95.              cell.onmouseout = function() {this.className='mouseOver';};
  96.              cell.onmouseover = function() {this.className='mouseOut';};

  97.              cell.setAttribute("bgcolor", "#FFFAFA");
  98.              cell.setAttribute("border", "0");
  99.                             
  100.              cell.onclick = function() { populateName(this, inputfield, otherfield); } ;
  101.              txtNode = document.createTextNode(nextNode);
  102.                              
  103.              cell.appendChild(txtNode);
  104.              row.appendChild(cell);
  105.              nameTableBody.appendChild(row);
  106.              }
  107.         }

  108.     function calculateOffsetLeft(field) {
  109.         return calculateOffset(field, "offsetLeft");
  110.         }

  111.     function calculateOffsetTop(field) {
  112.         return calculateOffset(field, "offsetTop");
  113.         }

  114.     function calculateOffset(field, attr) {
  115.         var offset = 0;
  116.         while(field) {
  117.             offset += field[attr];
  118.             field = field.offsetParent;
  119.             }
  120.         return offset;
  121.        }

  122.     function populateName(cell, inputfield, otherfield) {
  123.         var selectedvalue = cell.firstChild.nodeValue;
  124.         if(inputfield.id == "ajaxwon"){
  125.             otherfield.value = selectedvalue.substring(0, selectedvalue.length - 9);
  126.             inputfield.value = selectedvalue.substring(selectedvalue.length - 8, selectedvalue.length -1);
  127.         }else{
  128.             inputfield.value = selectedvalue.substring(0, selectedvalue.length - 8);
  129.             otherfield.value = selectedvalue.substring(selectedvalue.length - 7, selectedvalue.length -1);
  130.         }
  131.         clearNames();
  132.     }

  133.     function clearNames() {
  134.         var ind = nameTableBody.childNodes.length;
  135.         for (var i = ind - 1; i >= 0 ; i--) {
  136.             nameTableBody.removeChild(nameTableBody.childNodes[i]); }
  137.         popupdiv.style.display = "none";
  138.         }
 
  1. function rrsendRequest(){
  2.         inputfield = document.getElementById("ajaxempName");
  3.         otherfield = document.getElementById("empNo");
  4.         
  5.         myinitialization();
  6.         if(inputfield.value.length > 0){
  7.             xmlHttp = new XMLHttpRequest();
  8.             xmlHttp.onreadystatechange = handleStateChange;
  9.             var queryString = "<%=base %>/AjaxSearchAction.do?inputname=" + escape(inputfield.value);

  10.             xmlHttp.open("POST", queryString, true);
  11.             xmlHttp.send();
  12.         }else{
  13.             clearNames();
  14.             }
  15.         }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP