autocomplete.js
上传用户:shen332233
上传日期:2021-09-03
资源大小:7478k
文件大小:4k
源码类别:

Ajax

开发平台:

Java

  1. function doRequest(textboxID, url) {
  2.     setOffsets(textboxID);
  3.     var textbox = document.getElementById(textboxID);
  4.     if(textbox.value.length > 1) {
  5.         var ajaxRequest = new AjaxRequest(url);
  6.         ajaxRequest.addNamedFormElements(textboxID);
  7.         ajaxRequest.setPostRequest(showPopup);
  8.         ajaxRequest.sendRequest();
  9.     }
  10.     else if(textbox.value.length == 0) {
  11.         clearPopup();
  12.     }
  13. }
  14. function showPopup(ajaxRequest) {
  15.     document.getElementById("popup").style.display = "";
  16. }
  17.     
  18. function setOffsets(textboxID) {
  19.     var inputField = document.getElementById(textboxID);
  20.     var end = inputField.offsetWidth;
  21.     var left = calculateOffsetLeft(inputField);
  22.     var top = calculateOffsetTop(inputField) + inputField.offsetHeight;
  23.     var popup = document.getElementById("popup");
  24.     popup.style.border = "black 1px solid";
  25.     popup.style.left = left + "px";
  26.     popup.style.top = top + "px";
  27.     popup.style.width = "250px";
  28.     popup.style.height = "200px";
  29. }
  30. function calculateOffsetLeft(field) {
  31.     return calculateOffset(field, "offsetLeft");
  32. }
  33. function calculateOffsetTop(field) {
  34.     return calculateOffset(field, "offsetTop");
  35. }
  36. function calculateOffset(field, attr) {
  37.     var offset = 0;
  38.     while(field) {
  39.         offset += field[attr]; 
  40.         field = field.offsetParent;
  41.     }
  42.     return offset;
  43. }
  44.     
  45.     
  46. function clearPopup() {
  47.     var popup = document.getElementById("popup");
  48.     while(popup.childNodes.length > 0) {
  49.         popup.removeChild(popup.firstChild);
  50.     }
  51.     
  52.     popup.style.display = "none";
  53. }
  54. function addSelection(code, text) {
  55.     var popup = document.getElementById("popup");
  56.   
  57.     opener.addToSelectedSuppliersSelect(code, text);
  58.     
  59.     clearPopup();
  60.     AutocompleteManager.stopRunningInterval();
  61.     hideAutoComplete();
  62.     
  63.     document.getElementById("supplierName").value = "";
  64. }
  65. var AutocompleteManager = new AutocompleteManagerImpl();
  66. function AutocompleteManagerImpl() {
  67.     this.textboxes = new Object();
  68.     
  69.     this.startTheInterval = function(id) {
  70.         
  71.         var handler = this.textboxes[id];
  72.         if(handler.state == "running") {
  73.             return;
  74.         }
  75.         
  76.         var functionString = "handleInterval('" + id + "');" ;
  77.         handler.timeoutID = window.setInterval(functionString, handler.interval);
  78.         handler.state = "running";
  79.     }
  80.     this.getHandlerFor = function(id) {
  81.         return this.textboxes[id];
  82.     }
  83.     this.stopTheInterval = function(id) {
  84.         var handler = this.getHandlerFor(id);
  85.         window.clearInterval(handler.timeoutID);
  86.         handler.state = "stopped";
  87.     }
  88.     
  89.     this.stopRunningInterval = function() {
  90.         var handler = null;
  91.         for(var i = 0; i < this.textboxes.length; i++) {
  92.             handler = this.textboxes[i];
  93.             if(handler.state == "running") {
  94.                 window.clearInterval(handler.timeoutID);
  95.                 break;
  96.             }
  97.         }
  98.     }
  99.     this.registerHandler = function(handler) {
  100.         this.textboxes[handler.id] = handler;
  101.     }
  102.     
  103. }
  104. function AutocompleteHandler(id, url, interval, minLength) {
  105.     this.id = id;
  106.     this.url = url;
  107.     this.interval = interval;
  108.     this.minLength = minLength;
  109.     this.lastSearchString = "";
  110.     this.timeoutID;
  111.     this.state = "stopped";
  112. }
  113. function handleInterval(id) {
  114.     var searchString = document.getElementById(id).value;
  115.     var handler = AutocompleteManager.getHandlerFor(id);
  116.     if(searchString.length < handler.minLength || searchString.length == 0) {
  117.         clearPopup();
  118.         hideAutoComplete();
  119.         return;
  120.     }
  121.     if(searchString == handler.lastSearchString) {
  122.         return;
  123.     }
  124.     //Made it this far so make the request
  125.     doRequest(id, handler.url);
  126.     
  127.     //Remember the last search string
  128.     handler.lastSearchString = document.getElementById(id).value;
  129. }
  130. function emptyAutoComplete() {
  131.     var popup = document.getElementById("popup");
  132.     while(popup.hasChildNodes()) {
  133.         popup.removeChild(popup.firstChild);
  134.     }
  135. }
  136. function hideAutoComplete() {
  137.     document.getElementById("popup").style.display = "none";
  138. }
  139. function onFocusFunction(id) {
  140.     AutocompleteManager.startTheInterval(id);
  141. }