$(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/