什么叫自动填充,用过百度的应该都知道!当你输入关键词之后,会有一个下拉的候选列表,都是与你输入的内容相关的,这个就是自动填充的搜索建议。一般的搜索引擎或者站内搜索都会有这个功能。

今天分享下这个功能的实现,演示网址:http://www.mrhso.com/movie    演示图:

可以实现搜索提示,键盘移动选择,回车键确认搜索,可以设置每次访问后台的时间间隔,设置候选 列表的数据数量。

实现原理:通过一个叫Jquery Autocomplete 的jquery插件实现。

插件的js脚本如下:

jQuery.autocomplete = function(input, options) {
// Create a link to self
var me = this; // Create jQuery object for input element
var $input = $(input).attr("autocomplete", "off"); // Apply inputClass if necessary
if (options.inputClass) $input.addClass(options.inputClass); // Create results
var results = document.createElement("div");
// Create jQuery object for results
var $results = $(results);
$results.hide().addClass(options.resultsClass).css("position", "absolute");
if( options.width > 0 ) $results.css("width", options.width); // Add to body element
$("body").append(results); 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( options.data != null ){
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( row[0].length > 0 ){
// get the first character
sFirstChar = row[0].substring(0, 1).toLowerCase();
// 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(row);
}
} // add the data items to the cache
for( var k in stMatchSets ){
// increase the cache size
options.cacheLength++;
// add to the cache
addToCache(k, stMatchSets[k]);
}
} $input
.keydown(function(e) {
// track last key pressed
lastKeyPressCode = e.keyCode;
switch(e.keyCode) {
case 38: // up
e.preventDefault();
moveSelect(-1);
break;
case 40: // down
e.preventDefault();
moveSelect(1);
break;
case 9: // tab
case 13: // return
if( selectCurrent() ){
// make sure to blur off the current field
$input.get(0).blur();
e.preventDefault();
}
break;
default:
active = -1;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(function(){onChange();}, options.delay);
break;
}
})
.focus(function(){
// track whether the field has focus, we shouldn't process any results if the field no longer has focus
hasFocus = true;
})
.blur(function() {
// track whether the field has focus
hasFocus = false;
hideResults();
}); 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();
if (v == prev) return;
prev = v;
if (v.length >= options.minChars) {
$input.addClass(options.loadingClass);
requestData(v);
} else {
$input.removeClass(options.loadingClass);
$results.hide();
}
}; function moveSelect(step) { var lis = $("li", results);
if (!lis) return; active += step; if (active < 0) {
active = 0;
} else if (active >= lis.size()) {
active = lis.size() - 1;
} lis.removeClass("ac_over"); $(lis[active]).addClass("ac_over"); // Weird behaviour in IE
// if (lis[active] && lis[active].scrollIntoView) {
// lis[active].scrollIntoView(false);
// } }; function selectCurrent() {
var li = $("li.ac_over", results)[0];
if (!li) {
var $li = $("li", results);
if (options.selectOnly) {
if ($li.length == 1) li = $li[0];
} else if (options.selectFirst) {
li = $li[0];
}
}
if (li) {
selectItem(li);
return true;
} else {
return false;
}
}; function selectItem(li) {
if (!li) {
li = document.createElement("li");
li.extra = [];
li.selectValue = "";
}
var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML);
input.lastSelected = v;
prev = v;
$results.html("");
$input.val(v);
hideResultsNow();
if (options.onItemSelect) setTimeout(function() { options.onItemSelect(li) }, 1);
}; // selects a portion of the input string
function createSelection(start, end){
// get a reference to the input element
var field = $input.get(0);
if( field.createTextRange ){
var selRange = field.createTextRange();
selRange.collapse(true);
selRange.moveStart("character", start);
selRange.moveEnd("character", end);
selRange.select();
} else if( field.setSelectionRange ){
field.setSelectionRange(start, end);
} else {
if( field.selectionStart ){
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(sValue){
// 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($input.val() + sValue.substring(prev.length));
// 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(input);
// either use the specified width, or autocalculate based on form element
var iWidth = (options.width > 0) ? options.width : $input.width();
// reposition
$results.css({
width: parseInt(iWidth) + "px",
top: (pos.y + input.offsetHeight) + "px",
left: pos.x + "px"
}).show();
}; function hideResults() {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(hideResultsNow, 200);
}; function hideResultsNow() {
if (timeout) clearTimeout(timeout);
$input.removeClass(options.loadingClass);
if ($results.is(":visible")) {
$results.hide();
}
if (options.mustMatch) {
var v = $input.val();
if (v != input.lastSelected) {
selectItem(null);
}
}
}; function receiveData(q, data) {
if (data) {
$input.removeClass(options.loadingClass);
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 ($.browser.msie) {
// we put a styled iframe behind the calendar so HTML SELECT elements don't show through
$results.append(document.createElement('iframe'));
}
results.appendChild(dataToDom(data));
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
if( options.autoFill && ($input.val().toLowerCase() == q.toLowerCase()) ) autoFill(data[0][0]);
showResults();
} else {
hideResultsNow();
}
}; function parseData(data) {
if (!data) return null;
var parsed = [];
var rows = data.split(options.lineSeparator);
for (var i=0; i < rows.length; i++) {
var row = $.trim(rows[i]);
if (row) {
parsed[parsed.length] = row.split(options.cellSeparator);
}
}
return parsed;
}; function dataToDom(data) {
var ul = document.createElement("ul");
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 (!row) continue;
var li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if (row.length > 1) {
extra = [];
for (var j=1; j < row.length; j++) {
extra[extra.length] = row[j];
}
}
li.extra = extra;
ul.appendChild(li);
$(li).hover(
function() { $("li", ul).removeClass("ac_over"); $(this).addClass("ac_over"); active = $("li", ul).indexOf($(this).get(0)); },
function() { $(this).removeClass("ac_over"); }
).click(function(e) { e.preventDefault(); e.stopPropagation(); selectItem(this) });
}
return ul;
}; function requestData(q) {
if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ? loadFromCache(q) : null;
// recieve the cached data
if (data) {
receiveData(q, data);
// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
$.get(makeUrl(q), function(data) {
data = parseData(data);
addToCache(q, data);
receiveData(q, data);
});
// if there's been no data found, remove the loading class
} else {
$input.removeClass(options.loadingClass);
}
}; function makeUrl(q) {
var url = options.url + "?q=" + encodeURI(q);
for (var i in options.extraParams) {
url += "&" + i + "=" + encodeURI(options.extraParams[i]);
}
return url;
}; function loadFromCache(q) {
if (!q) return null;
if (cache.data[q]) return cache.data[q];
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var qs = q.substr(0, i);
var c = cache.data[qs];
if (c) {
var csub = [];
for (var j = 0; j < c.length; j++) {
var x = c[j];
var x0 = x[0];
if (matchSubset(x0, q)) {
csub[csub.length] = x;
}
}
return csub;
}
}
}
return null;
}; function matchSubset(s, sub) {
if (!options.matchCase) s = s.toLowerCase();
var i = s.indexOf(sub);
if (i == -1) return false;
return i == 0 || options.matchContains;
}; this.flushCache = function() {
flushCache();
}; this.setExtraParams = function(p) {
options.extraParams = p;
}; this.findValue = function(){
var q = $input.val(); if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ? loadFromCache(q) : null;
if (data) {
findValueCallback(q, data);
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
$.get(makeUrl(q), function(data) {
data = parseData(data)
addToCache(q, data);
findValueCallback(q, data);
});
} else {
// no matches
findValueCallback(q, null);
}
} function findValueCallback(q, data){
if (data) $input.removeClass(options.loadingClass); var num = (data) ? data.length : 0;
var li = null; for (var i=0; i < num; i++) {
var row = data[i]; if( row[0].toLowerCase() == q.toLowerCase() ){
li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if( row.length > 1 ){
extra = [];
for (var j=1; j < row.length; j++) {
extra[extra.length] = row[j];
}
}
li.extra = extra;
}
} if( options.onFindValue ) setTimeout(function() { options.onFindValue(li) }, 1);
} function addToCache(q, data) {
if (!data || !q || !options.cacheLength) return;
if (!cache.length || cache.length > options.cacheLength) {
flushCache();
cache.length++;
} else if (!cache[q]) {
cache.length++;
}
cache.data[q] = data;
}; function findPos(obj) {
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(url, options, data) {
// 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(options.width, 10) || 0; this.each(function() {
var input = this;
new jQuery.autocomplete(input, options);
}); // Don't break the chain
return this;
} jQuery.fn.autocompleteArray = function(data, options) {
return this.autocomplete(null, options, data);
} jQuery.fn.indexOf = function(e){
for( var i=0; i<this.length; i++ ){
if( this[i] == e ) return i;
}
return -1;
};

css样式如下:

.ac_results {
padding: 0px;
border: 1px solid WindowFrame;
background-color: Window;
overflow: hidden;
} .ac_results ul {
width: 100%;
list-style-position: outside;
list-style: none;
padding: 0;
margin: 0;
} .ac_results iframe {
display:none;/*sorry for IE5*/
display/**/:block;/*sorry for IE5*/
position:absolute;
top:0;
left:0;
z-index:-1;
filter:mask();
width:3000px;
height:3000px;
} .ac_results li {
margin: 0px;
padding: 2px 5px;
cursor: pointer;
display: block;
width: 100%;
font: menu;
font-size: 12px;
overflow: hidden;
} .ac_loading {
background : Window url('./indicator.gif') right center no-repeat;
} .ac_over {
background-color: Highlight;
color: HighlightText;
}

使用示例演示:

AJax数据传输格式:Sparta|896 Spencer|897 Spencerville|898 Spring Valley|899 Springboro|900 Springfield|901

下面演示了两种使用方法:通过ajax访问数据 和通过js数组获取数据!
<script type="text/javascript">
function findValue(li) {
if( li == null ) return alert("No match!"); // if coming from an AJAX call, let's use the CityId as the value
if( !!li.extra ) var sValue = li.extra[0]; // otherwise, let's just display the value in the text box
else var sValue = li.selectValue; alert("The value you selected was: " + sValue);
} function selectItem(li) {
findValue(li);
} function formatItem(row) {
return row[0] + " (id: " + row[1] + ")";
} function lookupAjax(){
var oSuggest = $("#CityAjax")[0].autocompleter; oSuggest.findValue(); return false;
} function lookupLocal(){
var oSuggest = $("#CityLocal")[0].autocompleter; oSuggest.findValue(); return false;
} $(document).ready(function() {
$("#CityAjax").autocomplete(
"autocomplete_ajax.cfm",
{
delay:10,
minChars:2,
matchSubset:1,
matchContains:1,
cacheLength:10,
onItemSelect:selectItem,
onFindValue:findValue,
formatItem:formatItem,
autoFill:true
}
); $("#CityLocal").autocompleteArray(
[
"Aberdeen", "Ada", "Adamsville", "Addyston", "Adelphi", "Adena", "Adrian", "Akron",
"Albany", "Alexandria", "Alger", "Alledonia", "Alliance", "Alpha", "Alvada",
"Alvordton", "Amanda", "Amelia", "Amesville", "Amherst", "Amlin", "Amsden",
"Amsterdam", "Andover", "Anna", "Ansonia", "Antwerp", "Apple Creek", "Arcadia",
"Arcanum", "Archbold", "Arlington", "Ashland", "Ashley", "Ashtabula", "Ashville",
"Athens", "Attica", "Atwater", "Augusta", "Aurora", "Austinburg", "Ava", "Avon",
"Avon Lake", "Bainbridge", "Bakersville", "Baltic", "Baltimore", "Bannock",
"Barberton", "Barlow", "Barnesville", "Bartlett", "Barton", "Bascom", "Batavia",
"Bath", "Bay Village", "Beach City", "Beachwood", "Beallsville", "Beaver",
"Beaverdam", "Bedford", "Bellaire", "Bellbrook", "Belle Center", "Belle Valley",
"Bellefontaine", "Bellevue", "Bellville", "Belmont", "Belmore", "Beloit", "Belpre",
"Benton Ridge", "Bentonville", "Berea", "Bergholz", "Berkey", "Berlin",
"Berlin Center", "Berlin Heights", "Bethel", "Bethesda", "Bettsville", "Beverly",
"Bidwell", "Big Prairie", "Birmingham", "Blacklick", "Bladensburg", "Blaine",
"Blakeslee", "Blanchester", "Blissfield", "Bloomdale", "Bloomingburg",
"Bloomingdale", "Bloomville", "Blue Creek", "Blue Rock", "Bluffton",
"Bolivar", "Botkins", "Bourneville", "Bowerston", "Bowersville",
"Bowling Green", "Bradford", "Bradner", "Brady Lake", "Brecksville",
"Bremen", "Brewster", "Brice", "Bridgeport", "Brilliant", "Brinkhaven",
"Bristolville", "Broadview Heights", "Broadway", "Brookfield", "Brookpark",
"Brookville", "Brownsville", "Brunswick", "Bryan", "Buchtel", "Buckeye Lake",
"Buckland", "Bucyrus", "Buffalo", "Buford", "Burbank", "Burghill", "Burgoon",
"Burkettsville", "Burton", "Butler", "Byesville", "Cable", "Cadiz", "Cairo",
"Caldwell", "Caledonia", "Cambridge", "Camden", "Cameron", "Camp Dennison",
"Campbell", "Canal Fulton", "Canal Winchester", "Canfield", "Canton", "Carbon Hill",
"Carbondale", "Cardington", "Carey", "Carroll", "Carrollton", "Casstown",
"Castalia", "Catawba", "Cecil", "Cedarville", "Celina", "Centerburg",
"Chagrin Falls", "Chandlersville", "Chardon", "Charm", "Chatfield", "Chauncey",
"Cherry Fork", "Chesapeake", "Cheshire", "Chester", "Chesterhill", "Chesterland",
"Chesterville", "Chickasaw", "Chillicothe", "Chilo", "Chippewa Lake",
"Christiansburg", "Cincinnati", "Circleville", "Clarington", "Clarksburg",
"Clarksville", "Clay Center", "Clayton", "Cleveland", "Cleves", "Clifton",
"Clinton", "Cloverdale", "Clyde", "Coal Run", "Coalton", "Coldwater", "Colerain",
"College Corner", "Collins", "Collinsville", "Colton", "Columbia Station",
"Columbiana", "Columbus", "Columbus Grove", "Commercial Point", "Conesville",
"Conneaut", "Conover", "Continental", "Convoy", "Coolville", "Corning", "Cortland",
"Coshocton", "Covington", "Creola", "Crestline", "Creston", "Crooksville",
"Croton", "Crown City", "Cuba", "Cumberland", "Curtice", "Custar", "Cutler",
"Cuyahoga Falls", "Cygnet", "Cynthiana", "Dalton", "Damascus", "Danville",
"Dayton", "De Graff", "Decatur", "Deerfield", "Deersville", "Defiance",
"Delaware", "Dellroy", "Delphos", "Delta", "Dennison", "Derby", "Derwent",
"Deshler", "Dexter City", "Diamond", "Dillonvale", "Dola", "Donnelsville",
"Dorset", "Dover", "Doylestown", "Dresden", "Dublin", "Dunbridge", "Duncan Falls",
"Dundee", "Dunkirk", "Dupont", "East Claridon", "East Fultonham",
"East Liberty", "East Liverpool", "East Palestine", "East Rochester",
"East Sparta", "East Springfield", "Eastlake", "Eaton", "Edgerton", "Edison",
"Edon", "Eldorado", "Elgin", "Elkton", "Ellsworth", "Elmore", "Elyria",
"Empire", "Englewood", "Enon", "Etna", "Euclid", "Evansport", "Fairborn",
"Fairfield", "Fairpoint", "Fairview", "Farmdale", "Farmer", "Farmersville",
"Fayette", "Fayetteville", "Feesburg", "Felicity", "Findlay", "Flat Rock",
"Fleming", "Fletcher", "Flushing", "Forest", "Fort Jennings", "Fort Loramie",
"Fort Recovery", "Fostoria", "Fowler", "Frankfort", "Franklin",
"Franklin Furnace", "Frazeysburg", "Fredericksburg", "Fredericktown",
"Freeport", "Fremont", "Fresno", "Friendship", "Fulton", "Fultonham",
"Galena", "Galion", "Gallipolis", "Galloway", "Gambier", "Garrettsville",
"Gates Mills", "Geneva", "Genoa", "Georgetown", "Germantown", "Gettysburg",
"Gibsonburg", "Girard", "Glandorf", "Glencoe", "Glenford", "Glenmont",
"Glouster", "Gnadenhutten", "Gomer", "Goshen", "Grafton", "Grand Rapids",
"Grand River", "Granville", "Gratiot", "Gratis", "Graysville", "Graytown",
"Green", "Green Camp", "Green Springs", "Greenfield", "Greenford",
"Greentown", "Greenville", "Greenwich", "Grelton", "Grove City",
"Groveport", "Grover Hill", "Guysville", "Gypsum", "Hallsville",
"Hamden", "Hamersville", "Hamilton", "Hamler", "Hammondsville",
"Hannibal", "Hanoverton", "Harbor View", "Harlem Springs", "Harpster",
"Harrisburg", "Harrison", "Harrisville", "Harrod", "Hartford", "Hartville",
"Harveysburg", "Haskins", "Haverhill", "Haviland", "Haydenville", "Hayesville",
"Heath", "Hebron", "Helena", "Hicksville", "Higginsport", "Highland", "Hilliard",
"Hillsboro", "Hinckley", "Hiram", "Hockingport", "Holgate", "Holland",
"Hollansburg", "Holloway", "Holmesville", "Homer", "Homerville", "Homeworth",
"Hooven", "Hopedale", "Hopewell", "Houston", "Howard", "Hoytville", "Hubbard",
"Hudson", "Huntsburg", "Huntsville", "Huron", "Iberia", "Independence",
"Irondale", "Ironton", "Irwin", "Isle Saint George", "Jackson", "Jackson Center",
"Jacksontown", "Jacksonville", "Jacobsburg", "Jamestown", "Jasper",
"Jefferson", "Jeffersonville", "Jenera", "Jeromesville", "Jerry City",
"Jerusalem", "Jewell", "Jewett", "Johnstown", "Junction City", "Kalida",
"Kansas", "Keene", "Kelleys Island", "Kensington", "Kent", "Kenton",
"Kerr", "Kettlersville", "Kidron", "Kilbourne", "Killbuck", "Kimbolton",
"Kings Mills", "Kingston", "Kingsville", "Kinsman", "Kipling", "Kipton",
"Kirby", "Kirkersville", "Kitts Hill", "Kunkle", "La Rue", "Lacarne",
"Lafayette", "Lafferty", "Lagrange", "Laings", "Lake Milton", "Lakemore",
"Lakeside Marblehead", "Lakeview", "Lakeville", "Lakewood", "Lancaster",
"Langsville", "Lansing", "Latham", "Latty", "Laura", "Laurelville",
"Leavittsburg", "Lebanon", "Lees Creek", "Leesburg", "Leesville",
"Leetonia", "Leipsic", "Lemoyne", "Lewis Center", "Lewisburg",
"Lewistown", "Lewisville", "Liberty Center", "Lima", "Limaville",
"Lindsey", "Lisbon", "Litchfield", "Lithopolis", "Little Hocking",
"Lockbourne", "Lodi", "Logan", "London", "Londonderry",
"Long Bottom", "Lorain", "Lore City", "Loudonville", "Louisville",
"Loveland", "Lowell", "Lowellville", "Lower Salem", "Lucas",
"Lucasville", "Luckey", "Ludlow Falls", "Lynchburg", "Lynx",
"Lyons", "Macedonia", "Macksburg", "Madison", "Magnetic Springs",
"Magnolia", "Maineville", "Malaga", "Malinta", "Malta", "Malvern",
"Manchester", "Mansfield", "Mantua", "Maple Heights", "Maplewood",
"Marathon", "Marengo", "Maria Stein", "Marietta", "Marion",
"Mark Center", "Marshallville", "Martel", "Martin", "Martins Ferry",
"Martinsburg", "Martinsville", "Marysville", "Mason", "Massillon",
"Masury", "Maumee", "Maximo", "Maynard", "Mc Arthur", "Mc Clure",
"Mc Comb", "Mc Connelsville", "Mc Cutchenville", "Mc Dermott",
"Mc Donald", "Mc Guffey", "Mechanicsburg", "Mechanicstown",
"Medina", "Medway", "Melmore", "Melrose", "Mendon", "Mentor",
"Mesopotamia", "Metamora", "Miamisburg", "Miamitown", "Miamiville",
"Middle Bass", "Middle Point", "Middlebranch", "Middleburg",
"Middlefield", "Middleport", "Middletown", "Midland", "Midvale",
"Milan", "Milford", "Milford Center", "Millbury", "Milledgeville",
"Miller City", "Millersburg", "Millersport", "Millfield",
"Milton Center", "Mineral City", "Mineral Ridge", "Minerva",
"Minford", "Mingo", "Mingo Junction", "Minster", "Mogadore",
"Monclova", "Monroe", "Monroeville", "Montezuma", "Montpelier",
"Montville", "Morral", "Morristown", "Morrow", "Moscow",
"Mount Blanchard", "Mount Cory", "Mount Eaton", "Mount Gilead",
"Mount Hope", "Mount Liberty", "Mount Orab", "Mount Perry",
"Mount Pleasant", "Mount Saint Joseph", "Mount Sterling",
"Mount Vernon", "Mount Victory", "Mowrystown", "Moxahala",
"Munroe Falls", "Murray City", "Nankin", "Napoleon", "Nashport",
"Nashville", "Navarre", "Neapolis", "Neffs", "Negley",
"Nelsonville", "Nevada", "Neville", "New Albany", "New Athens",
"New Bavaria", "New Bloomington", "New Bremen", "New Carlisle",
"New Concord", "New Hampshire", "New Haven", "New Holland",
"New Knoxville", "New Lebanon", "New Lexington", "New London",
"New Madison", "New Marshfield", "New Matamoras", "New Middletown",
"New Paris", "New Philadelphia", "New Plymouth", "New Richmond",
"New Riegel", "New Rumley", "New Springfield", "New Straitsville",
"New Vienna", "New Washington", "New Waterford", "New Weston",
"Newark", "Newbury", "Newcomerstown", "Newport", "Newton Falls",
"Newtonsville", "Ney", "Niles", "North Baltimore", "North Bend",
"North Benton", "North Bloomfield", "North Fairfield",
"North Georgetown", "North Hampton", "North Jackson",
"North Kingsville", "North Lawrence", "North Lewisburg",
"North Lima", "North Olmsted", "North Ridgeville", "North Robinson",
"North Royalton", "North Star", "Northfield", "Northwood", "Norwalk",
"Norwich", "Nova", "Novelty", "Oak Harbor", "Oak Hill", "Oakwood",
"Oberlin", "Oceola", "Ohio City", "Okeana", "Okolona", "Old Fort",
"Old Washington", "Olmsted Falls", "Ontario", "Orangeville",
"Oregon", "Oregonia", "Orient", "Orrville", "Orwell", "Osgood",
"Ostrander", "Ottawa", "Ottoville", "Otway", "Overpeck",
"Owensville", "Oxford", "Painesville", "Palestine", "Pandora",
"Paris", "Parkman", "Pataskala", "Patriot", "Paulding", "Payne",
"Pedro", "Peebles", "Pemberton", "Pemberville", "Peninsula",
"Perry", "Perrysburg", "Perrysville", "Petersburg", "Pettisville",
"Phillipsburg", "Philo", "Pickerington", "Piedmont", "Pierpont",
"Piketon", "Piney Fork", "Pioneer", "Piqua", "Pitsburg",
"Plain City", "Plainfield", "Pleasant City", "Pleasant Hill",
"Pleasant Plain", "Pleasantville", "Plymouth", "Polk",
"Pomeroy", "Port Clinton", "Port Jefferson", "Port Washington",
"Port William", "Portage", "Portland", "Portsmouth", "Potsdam",
"Powell", "Powhatan Point", "Proctorville", "Prospect", "Put in Bay",
"Quaker City", "Quincy", "Racine", "Radnor", "Randolph", "Rarden",
"Ravenna", "Rawson", "Ray", "Rayland", "Raymond", "Reedsville",
"Reesville", "Reno", "Republic", "Reynoldsburg", "Richfield",
"Richmond", "Richmond Dale", "Richwood", "Ridgeville Corners",
"Ridgeway", "Rio Grande", "Ripley", "Risingsun", "Rittman",
"Robertsville", "Rock Camp", "Rock Creek", "Rockbridge", "Rockford",
"Rocky Ridge", "Rocky River", "Rogers", "Rome", "Rootstown", "Roseville",
"Rosewood", "Ross", "Rossburg", "Rossford", "Roundhead", "Rudolph",
"Rushsylvania", "Rushville", "Russells Point", "Russellville", "Russia",
"Rutland", "Sabina", "Saint Clairsville", "Saint Henry", "Saint Johns",
"Saint Louisville", "Saint Marys", "Saint Paris", "Salem", "Salesville",
"Salineville", "Sandusky", "Sandyville", "Sarahsville", "Sardinia",
"Sardis", "Savannah", "Scio", "Scioto Furnace", "Scott", "Scottown",
"Seaman", "Sebring", "Sedalia", "Senecaville", "Seven Mile", "Seville",
"Shade", "Shadyside", "Shandon", "Sharon Center", "Sharpsburg",
"Shauck", "Shawnee", "Sheffield Lake", "Shelby", "Sherrodsville",
"Sherwood", "Shiloh", "Short Creek", "Shreve", "Sidney", "Sinking Spring",
"Smithfield", "Smithville", "Solon", "Somerdale", "Somerset",
"Somerville", "South Bloomingville", "South Charleston", "South Lebanon",
"South Point", "South Salem", "South Solon", "South Vienna",
"South Webster", "Southington", "Sparta", "Spencer", "Spencerville",
"Spring Valley", "Springboro", "Springfield", "Stafford", "Sterling",
"Steubenville", "Stewart", "Stillwater", "Stockdale", "Stockport",
"Stone Creek", "Stony Ridge", "Stout", "Stoutsville", "Stow", "Strasburg",
"Stratton", "Streetsboro", "Strongsville", "Struthers", "Stryker",
"Sugar Grove", "Sugarcreek", "Sullivan", "Sulphur Springs", "Summerfield",
"Summit Station", "Summitville", "Sunbury", "Swanton", "Sycamore",
"Sycamore Valley", "Sylvania", "Syracuse", "Tallmadge", "Tarlton",
"Terrace Park", "The Plains", "Thompson", "Thornville", "Thurman",
"Thurston", "Tiffin", "Tiltonsville", "Tipp City", "Tippecanoe", "Tiro",
"Toledo", "Tontogany", "Torch", "Toronto", "Tremont City", "Trenton",
"Trimble", "Trinway", "Troy", "Tuppers Plains", "Tuscarawas", "Twinsburg",
"Uhrichsville", "Union City", "Union Furnace", "Unionport", "Uniontown",
"Unionville", "Unionville Center", "Uniopolis", "Upper Sandusky", "Urbana",
"Utica", "Valley City", "Van Buren", "Van Wert", "Vandalia", "Vanlue",
"Vaughnsville", "Venedocia", "Vermilion", "Verona", "Versailles",
"Vickery", "Vienna", "Vincent", "Vinton", "Wadsworth", "Wakefield",
"Wakeman", "Walbridge", "Waldo", "Walhonding", "Walnut Creek", "Wapakoneta",
"Warnock", "Warren", "Warsaw", "Washington Court House",
"Washingtonville", "Waterford", "Waterloo", "Watertown", "Waterville",
"Wauseon", "Waverly", "Wayland", "Wayne", "Waynesburg", "Waynesfield",
"Waynesville", "Wellington", "Wellston", "Wellsville", "West Alexandria",
"West Chester", "West Elkton", "West Farmington", "West Jefferson",
"West Lafayette", "West Liberty", "West Manchester", "West Mansfield",
"West Millgrove", "West Milton", "West Point", "West Portsmouth",
"West Rushville", "West Salem", "West Union", "West Unity", "Westerville",
"Westfield Center", "Westlake", "Weston", "Westville", "Wharton",
"Wheelersburg", "Whipple", "White Cottage", "Whitehouse", "Wickliffe",
"Wilberforce", "Wilkesville", "Willard", "Williamsburg", "Williamsfield",
"Williamsport", "Williamstown", "Williston", "Willoughby", "Willow Wood",
"Willshire", "Wilmington", "Wilmot", "Winchester", "Windham", "Windsor",
"Winesburg", "Wingett Run", "Winona", "Wolf Run", "Woodsfield",
"Woodstock", "Woodville", "Wooster", "Wren", "Xenia", "Yellow Springs",
"Yorkshire", "Yorkville", "Youngstown", "Zaleski", "Zanesfield", "Zanesville",
"Zoar"
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
});
</script>
 delay:10 表示每次请求演示 10毫秒
 maxItemsToShow:10 表示每次结果只显示 10条
 autoFill:true, 表示自动填充

 其他选项可以默认,也可以直接查看源代码进行设置!  如果觉得这个插件太过简单,可以在此基础上添加功能!
												

5.电影搜索之 自动填充,也叫autocomplete、搜索建议!的更多相关文章

  1. 网页禁用表单的自动完成功能禁用密码自动填充autocomplete

    网页中表单的自动完成功能,有时候很方便,但是有时候并不想让浏览器记忆表单,比如禁用密码域自动填充功能, 网页禁用表单的自动完成功能是由input元素的autocomplete属性控制,关闭表单的自动完 ...

  2. chrome防止自动填充密码

    是防止,不是禁止.禁止需要在浏览器设置. chrome浏览器保存密码之后,页面上有password存在的时候会出现自动填充用户名和密码的情况. 添加disableautocomplete和autoco ...

  3. combobox实现模糊查询自动填充

    利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...

  4. Html登录表单阻止自动填充

    设置属性 autocomplete="off" 阻止浏览器从cache获取数据填充登录表单. <input type="text" name=" ...

  5. html页面禁止自动填充浏览器记住的密码

    现在的浏览器功能越来越强大,比如Chrome浏览器,在一个系统login的时候我们一般会记住密码,那么在整个系统中,浏览器一旦遇到 type="password"的控件,就会把密码 ...

  6. chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式。

    参考blog来自 http://segmentfault.com/q/1010000000671971 chrome浏览器当表单自动填充时,怎么去除浏览器自动添加的默认样式. 一.发现该问题的原因-是 ...

  7. input框自动填充内容背景颜色为黄色解决方法

    谷歌浏览器input自动填充内容,背景色会是黄色,想改的话: input:-webkit-autofill { box-shadow: 0 0 0px 1000px white inset;} 这种方 ...

  8. 去掉chrome记住密码后自动填充表单的黄色背景

    chrome表单自动填充后,input文本框的背景会变成黄色的,通过审查元素可以看到这是由于chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对 ...

  9. Chrome 自动填充的表单是淡黄色的背景怎么办!

    chrome浏览器自动填充表单的黄色背景高亮(#FAFFBD)一直困扰着我,我之前没想着理它,可是最近一个登陆框,需要用到图标,于是我草率的直接设置在input元素里面,结果问题就来了,很难看很难看, ...

随机推荐

  1. ZOJ 4019 Schrödinger's Knapsack (from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    题意: 第一类物品的价值为k1,第二类物品价值为k2,背包的体积是 c ,第一类物品有n 个,每个体积为S11,S12,S13,S14.....S1n ; 第二类物品有 m 个,每个体积为 S21,S ...

  2. ACM之路

    从10月我刚接触到acm竞赛,到现在2017年2.20接近4个月的时间,我才刷到200道题.在刷题的过程中,我曾遇到困难,我也从一次性就a过,但是有时候会想到放弃.不过既然已经踏进来一只脚,还不如就好 ...

  3. [题解](数学)BZOJ_1257_余数求和

    来源:https://blog.csdn.net/loi_dqs/article/details/50522975 并不知道为什么是sqrt(n)的段数......书上写的看不懂...... 但是这个 ...

  4. [软件工程基础]PhyLab 需求与功能分析改进文档

    NABCD 模型 Need 需求 根据 Default 的需求文档,物理实验网站对于北航大二学生完成物理实验有较大的帮助,反馈较好.由于在 2016-2017 春季学期,网站数据库因为不明原因被删除了 ...

  5. BZOJ1257(数论知识)

    感觉做法很神奇……想不到啊qwq 题目: Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k ...

  6. [WOJ3010] 骰子

    题目描述: 骰子是一个六面分别刻有一到六点的立方体,每次投掷骰子,理论上得到\(1\)到\(6\)的概率都是\(1/6\). 有骰子一颗,连续投掷\(n\)次,问点数总和大于等于\(X\)的概率是多少 ...

  7. oracle把一个表的数据复制到另一个表中

    http://blog.csdn.net/my_name_nb/article/details/64128015 ........................ 1. 新增一个表,通过另一个表的结构 ...

  8. 25 Groovy 相关资料

    Groovy Homepage Groovy API page Groovy documentation Groovy Goodness blog series from Hubert Klein I ...

  9. 在SpringBoot中用SpringAOP实现日志记录功能

    背景: 我需要在一个SpringBoot的项目中的每个controller加入一个日志记录,记录关于请求的一些信息. 代码类似于: logger.info(request.getRequestUrl( ...

  10. php设计模式学习之工厂模式

    我的认为:所为工厂模式是事先有一系类class,一个工厂类' 工厂类根据不同的参数创建不同的对象,调用各自的方法; php利用工厂模式实现计算器: ?php /** * Created by PhpS ...