美高梅官方网站3045-mgm6608美高梅app下载
jquery.AutoComplete.js中文改正版-Web前端之家

jquery.AutoComplete.js中文改正版-Web前端之家

作者:mgm美高梅 官方网址    来源:未知    发布时间:2019-11-22 19:37    浏览量:

复制代码 代码如下:jQuery.autocomplete = function { // Create a link to self var me = this; // Create jQuery object for input element var $input = $.attr("autocomplete", "off"); // Apply inputClass if necessary if $input.addClass; // Create results var results = document.createElement; // Create jQuery object for results var $results = $; $results.hide().addClass.css("position", "absolute"); if $results.css("width", options.width); // Add to body element $.append; input.autocompleter = me; var timeout = null; var prev = ""; var active = -1; var cache = {}; var keyb = false; var hasFocus = false; var lastKeyPressCode = null; // flush cache function flushCache() { cache = {}; cache.data = {}; cache.length = 0; }; // flush cache flushCache(); // if there is a data array supplied if { var sFirstChar = "", stMatchSets = {}, row = []; // no url was specified, we need to adjust the cache length to make sure it fits the local data store if (typeof options.url != "string") options.cacheLength = 1; // loop through the array and create a lookup structure for (var i = 0; i < options.data.length; i++) { // if row is a string, make an array otherwise just reference the array row = ((typeof options.data[i] == "string") ? [options.data[i]] : options.data[i]); // if the length is zero, don't add to list if { // get the first character sFirstChar = row[0].substring; // if no lookup array for this character exists, look it up now if (!stMatchSets[sFirstChar]) stMatchSets[sFirstChar] = []; // if the match is a string stMatchSets[sFirstChar].push; } } // add the data items to the cache for { // increase the cache size options.cacheLength++; // add to the cache addToCache; } } $input .keydown { // track last key pressed lastKeyPressCode = e.keyCode; switch { case 38: // up e.preventDefault; break; case 40: // down e.preventDefault; break; case 9: // tab case 13: // return if { // make sure to blur off the current field $input.get; e.preventDefault(); } break; default: active = -1; if clearTimeout; timeout = setTimeout { onChange; break; } }) .focus { // track whether the field has focus, we shouldn't process any results if the field no longer has focus hasFocus = true; }) .blur { // track whether the field has focus hasFocus = false; hideResults .bind { // @hack:support for inputing chinese characters in firefox onChange; hideResultsNow(); function onChange() { // ignore if the following keys are pressed: [del] [shift] [capslock] if (lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32)) return $results.hide(); var v = $input.val return; prev = v; if (v.length >= options.minChars) { $input.addClass; requestData; } else { $input.removeClass; $results.hide(); } }; function moveSelect { var lis = $; if return; active += step; if { active = 0; } else if { active = lis.size() - 1; } lis.removeClass; $.addClass; // Weird behaviour in IE // if (lis[active] && lis[active].scrollIntoView) { // lis[active].scrollIntoView; // } }; function selectCurrent() { var li = $("li.ac_over", results)[0]; if { var $li = $; if { if li = $li[0]; } else if { li = $li[0]; } } if ; return true; } else { return false; } }; function selectItem { li = document.createElement; li.extra = []; li.selectValue = ""; } var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML); input.lastSelected = v; prev = v; $results.html; hideResultsNow(); if setTimeout { options.onItemSelect; }; // selects a portion of the input string function createSelection { // get a reference to the input element var field = $input.get; if (field.createTextRange) { var selRange = field.createTextRange(); selRange.collapse; selRange.moveStart; selRange.moveEnd; selRange.select(); } else if (field.setSelectionRange) { field.setSelectionRange; } else { if { field.selectionStart = start; field.selectionEnd = end; } } field.focus(); }; // fills in the input box w/the first match (assumed to be the best match) function autoFill { // if the last user key pressed was backspace, don't autofill if (lastKeyPressCode != 8) { // fill in the value (keep the case the user has typed) $input.val + sValue.substring; // select the portion of the value not typed by the user (so the next character will erase) createSelection(prev.length, sValue.length); } }; function showResults() { // get the position of the input field right now (in case the DOM is shifted) var pos = findPos; // either use the specified width, or autocalculate based on form element var iWidth = ? options.width : $input.width(); // reposition $results.css({ width: parseInt + "px", top: (pos.y + input.offsetHeight) + "px", left: pos.x + "px" }).show(); }; function hideResults clearTimeout; timeout = setTimeout; }; function hideResultsNow clearTimeout; $input.removeClass; if ($results.is { $results.hide(); } if { var v = $input.val(); if (v != input.lastSelected) { selectItem; } } }; function receiveData { $input.removeClass; results.innerHTML = ""; // if the field no longer has focus or if there are no matches, do not display the drop down if (!hasFocus || data.length == 0) return hideResultsNow(); if { // we put a styled iframe behind the calendar so HTML SELECT elements don't show through $results.append(document.createElement; } results.appendChild; // autofill in the complete box w/the first match as long as the user hasn't entered in more data if (options.autoFill && .toLowerCase) autoFill; showResults(); } else { hideResultsNow(); } }; function parseData return null; var parsed = []; var rows = data.split(options.lineSeparator); for (var i = 0; i < rows.length; i++) { var row = $.trim { parsed[parsed.length] = row.split(options.cellSeparator); } } return parsed; }; function dataToDom { var ul = document.createElement; var num = data.length; // limited results to a max number if ((options.maxItemsToShow > 0) && (options.maxItemsToShow < num)) num = options.maxItemsToShow; for (var i = 0; i < num; i++) { var row = data[i]; if continue; var li = document.createElement; if { li.innerHTML = options.formatItem; li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if { extra = []; for (var j = 1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; ul.appendChild.hover { $.removeClass.addClass; active = $.indexOf; }, function.removeClass.click { e.preventDefault(); e.stopPropagation }); } return ul; }; function requestData { if q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache : null; // recieve the cached data if { receiveData; // if an AJAX url has been supplied, try loading the data now } else if ((typeof options.url == "string") && (options.url.length > 0)) { $.get, function { data = parseData; addToCache; receiveData; // if there's been no data found, remove the loading class } else { $input.removeClass; } }; function makeUrl { var url = options.url + "?q=" + escape; for (var i in options.extraParams) { url += "&" + i + "=" + escape(options.extraParams[i]); } return url; }; function loadFromCache return null; if return cache.data[q]; if { for (var i = q.length - 1; i >= options.minChars; i--) { var qs = q.substr; var c = cache.data[qs]; if { var csub = []; for (var j = 0; j < c.length; j++) { var x = c[j]; var x0 = x[0]; if { csub[csub.length] = x; } } return csub; } } } return null; }; function matchSubset { if s = s.toLowerCase(); var i = s.indexOf return false; return i == 0 || options.matchContains; }; this.flushCache = function; }; this.setExtraParams = function { options.extraParams = p; }; this.findValue = function() { var q = $input.val(); if q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache { findValueCallback; } else if ((typeof options.url == "string") && (options.url.length > 0)) { $.get, function { data = parseData addToCache; findValueCallback; } else { // no matches findValueCallback; } } function findValueCallback $input.removeClass; var num = ? data.length : 0; var li = null; for (var i = 0; i < num; i++) { var row = data[i]; if == q.toLowerCase { li = document.createElement; if { li.innerHTML = options.formatItem; li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if { extra = []; for (var j = 1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; } } if setTimeout { options.onFindValue; } function addToCache { if (!data || !q || !options.cacheLength) return; if (!cache.length || cache.length > options.cacheLength) { flushCache(); cache.length++; } else if { cache.length++; } cache.data[q] = data; }; function findPos { var curleft = obj.offsetLeft || 0; var curtop = obj.offsetTop || 0; while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } return { x: curleft, y: curtop }; } } jQuery.fn.autocomplete = function { // Make sure options exists options = options || {}; // Set url as option options.url = url; // set some bulk local data options.data = ((typeof data == "object") && (data.constructor == Array)) ? data : null; // Set default values for required options options.inputClass = options.inputClass || "ac_input"; options.resultsClass = options.resultsClass || "ac_results"; options.lineSeparator = options.lineSeparator || "n"; options.cellSeparator = options.cellSeparator || "|"; options.minChars = options.minChars || 1; options.delay = options.delay || 400; options.matchCase = options.matchCase || 0; options.matchSubset = options.matchSubset || 1; options.matchContains = options.matchContains || 0; options.cacheLength = options.cacheLength || 1; options.mustMatch = options.mustMatch || 0; options.extraParams = options.extraParams || {}; options.loadingClass = options.loadingClass || "ac_loading"; options.selectFirst = options.selectFirst || false; options.selectOnly = options.selectOnly || false; options.maxItemsToShow = options.maxItemsToShow || -1; options.autoFill = options.autoFill || false; options.width = parseInt || 0; this.each { var input = this; new jQuery.autocomplete; // Don't break the chain return this; } jQuery.fn.autocompleteArray = function { return this.autocomplete; } jQuery.fn.indexOf = function { for (var i = 0; i < this.length; i++) { if return i; } return -1; };

友情链接: 网站地图
Copyright © 2015-2019 http://www.zen-40.com. mgm美高梅有限公司 版权所有