$(function(){ var data = "the People's Republic of China".split(" "); $("#autocomplete").autocomplete(data,{minChars:0}).result(function(event,data,formatted){ alert(data); }); }); </script> <input type="text" id="autocomplete"/>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="../css/autocomplete/jquery.autocomplete.css"/> <script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="../js/autocomplete/jquery.autocomplete.js"></script> <script type="text/javascript"> $(function(){ var emails = [ { name: "Peter", to: "peter@pan.de" }, { name: "Molly", to: "molly@yahoo.com" }, { name: "Forneria", to: "live@japan.jp" }, { name: "Master <em>Sync</em>", to: "205bw@samsung.com" }, { name: "Dr. <strong>Tech</strong> de Log", to: "g15@logitech.com" }, { name: "Don Corleone", to: "don@vegas.com" }, { name: "Mc Chick", to: "info@donalds.org" }, { name: "Donnie Darko", to: "dd@timeshift.info" }, { name: "Quake The Net", to: "webmaster@quakenet.org" }, { name: "Dr. Write", to: "write@writable.com" }, { name: "GG Bond", to: "Bond@qq.com" }, { name: "Zhuzhu Xia", to: "zhuzhu@qq.com" } ]; $("#autocomplete").autocomplete(emails,{ minChars: 0,//自動完成激活以前填入的最小字符 max:12,//列表條目數 width: 400,//提示的寬度 scrollHeight: 300,//提示的高度 matchContains: true,//是否只要包含文本框裏的就能夠 autoFill:false,//自動填充 formatItem: function(data, i, max) {//格式化列表中的條目 row:條目對象,i:當前條目數,max:總條目數 return i + '/' + max + ':"' + data.name + '"[' + data.to + ']'; }, formatMatch: function(data, i, max) {//配合formatItem使用,做用在於,因爲使用了formatItem,因此條目中的內容有所改變,而咱們要匹配的是原始的數據,因此用formatMatch作一個調整,使之匹配原始數據 return data.name + data.to; }, formatResult: function(data) {//定義最終返回的數據,好比咱們仍是要返回原始數據,而不是formatItem過的數據 return data.to; } }).result(function(event,data,formatted){ alert(data.to); }); }); </script> </head> <body> <input type="text" id="autocomplete"/> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="../css/autocomplete/jquery.autocomplete.css"/> <script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="../js/autocomplete/jquery.autocomplete.js"></script> <script type="text/javascript"> function zdbq(id){ var url = encodeURI('/xx/xx.action'); $("#"+id).autocomplete( url, { minChars: 0,//自動完成激活以前填入的最小字符 max:12,//列表條目數 width: 400,//提示的寬度 scrollHeight: 300,//提示的高度 matchContains: true,//是否只要包含文本框裏的就能夠 autoFill:false,//自動填充 matchContains: true, matchCase:true, parse: function(data) { var obj =eval("(" + data + ")"); //轉換成js對象 return $.map(obj, function(row) { return { data: row, value: row.name, result: row.name }; });//給後臺交互的數據進行處理 }, formatItem: function(data, i, max) {//格式化列表中的條目 row:條目對象,i:當前條目數,max:總條目數 return i + '/' + max + ':"' + data.name; }, formatMatch: function(data, i, max) {//配合formatItem使用,做用在於,因爲使用了formatItem,因此條目中的內容有所改變,而咱們要匹配的是原始的數據,因此用formatMatch作一個調整,使之匹配原始數據 return data.name; }, formatResult: function(data) {//定義最終返回的數據,好比咱們仍是要返回原始數據,而不是formatItem過的數據 return data.name; } }) } </script> </head> <body> <input type="text" id="autocomplete" onkeyup="zdbq('autocomplete');"/> </body> </html>
中文支持:javascript
在對中文輸入法打開時,firefox3.0中是對中文拼音的自動匹配,而對輸入後的中文沒法及時觸發匹配;而在個人IE6.0下,則無此問題。php
緣由分析: Autocomplete插件對用戶輸入字符的觸發自動匹配是經過」keydown」事件進行的(可分析 jquery.autocomplete.js第92行),在IE6中,當輸入法打開時,輸入的字符是不會觸發」keydown」的,只有中文輸入完畢才 觸發之,因此中文輸入和latin文沒有區別的;但在firefox3.0下,不管輸入法打開否,按鍵都會觸發」keydown」事件,因此形成中文輸入 完畢,自動匹配的是剛纔打出的部分中文拼音字母。css
解決方法: 網上查到的最多作法是修改jquery.autocomplete.js第92行,將」keydown」替換爲」keyup」, 但這個不是根本辦法,雖然這樣改後可在firefox中及時對輸入的中文進行自動匹配,但將原插件中回車、tab等重要的事件機制破壞了,好比這樣改後, 若是你的input是在一個form裏的話,回車從原來的將選定項輸入到input中變爲了直接提交form表單了,這並非咱們想要的。html
個人方法原理是,補充一個原插件觸發查詢的事件,就是當input輸入欄發生字符變化時,從新進行查詢(調用其內部的onChange函數),這裏 主要針對firefox而言,由於咱們的系統訪問最多的是IE和firefox。而剛好firefox有一個input變化的事件就是oninput,那麼咱們只要在原jquery.autocomplete.js第199行(即$input.bind方法的末尾),插入以下代碼:java
.bind("input", function() { onChange(0, true); })大部分轉載:http://kb.cnblogs.com/a/2351152/