jQuery Autocomplete


jQuery Autocomplete 插件根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择。通过给 Autocomplete 字段焦点或者在其中输入字符,插件开始搜索匹配的条目并显示供选择的值的列表。通过输入更多的字符,用户可以过滤列表以获得更好的匹配。

该插件现在是 jQuery UI 的一部分,独立的版本不会再更新了。目前版本是 1.6。

访问 jQuery Autocomplete 官网

实例演示

jQuery Autocomplete 插件演示。

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>jQuery Autocomplete 插件</title>
  6. <script type="text/javascript" src="http://jquery.bassistance.de/autocomplete/lib/jquery.js"></script>
  7. <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/jquery.bgiframe.min.js'></script>
  8. <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/jquery.ajaxQueue.js'></script>
  9. <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/thickbox-compressed.js'></script>
  10. <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/jquery.autocomplete.js'></script>
  11. <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/demo/localdata.js'></script>
  12. <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/demo/main.css" />
  13. <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/jquery.autocomplete.css" />
  14. <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/lib/thickbox.css" />
  15. <script type="text/javascript">
  16. $().ready(function() {
  17.  
  18. function log(event, data, formatted) {
  19. $("<li>").html( !data ? "No match!" : "Selected: " + formatted).appendTo("#result");
  20. }
  21. function formatItem(row) {
  22. return row[0] + " (<strong>id: " + row[1] + "</strong>)";
  23. }
  24. function formatResult(row) {
  25. return row[0].replace(/(<.+?>)/gi, '');
  26. }
  27. $("#suggest1").focus().autocomplete(cities);
  28. $("#month").autocomplete(months, {
  29. minChars: 0,
  30. max: 12,
  31. autoFill: true,
  32. mustMatch: true,
  33. matchContains: false,
  34. scrollHeight: 220,
  35. formatItem: function(data, i, total) {
  36. // 不在值列表中显示当前月份(无论何种原因)
  37. if ( data[0] == months[new Date().getMonth()] ) 
  38. return false;
  39. return data[0];
  40. }
  41. });
  42. $("#suggest13").autocomplete(emails, {
  43. minChars: 0,
  44. width: 310,
  45. matchContains: "word",
  46. autoFill: false,
  47. formatItem: function(row, i, max) {
  48. return i + "/" + max + ": \"" + row.name + "\" [" + row.to + "]";
  49. },
  50. formatMatch: function(row, i, max) {
  51. return row.name + " " + row.to;
  52. },
  53. formatResult: function(row) {
  54. return row.to;
  55. }
  56. });
  57. $("#singleBirdRemote").autocomplete("search.php", {
  58. width: 260,
  59. selectFirst: false
  60. });
  61. $("#suggest14").autocomplete(cities, {
  62. matchContains: true,
  63. minChars: 0
  64. });
  65. $("#suggest3").autocomplete(cities, {
  66. multiple: true,
  67. mustMatch: true,
  68. autoFill: true
  69. });
  70. $("#suggest4").autocomplete('search.php', {
  71. width: 300,
  72. multiple: true,
  73. matchContains: true,
  74. formatItem: formatItem,
  75. formatResult: formatResult
  76. });
  77. $("#imageSearch").autocomplete("images.php", {
  78. width: 320,
  79. max: 4,
  80. highlight: false,
  81. scroll: true,
  82. scrollHeight: 300,
  83. formatItem: function(data, i, n, value) {
  84. return "<img src='images/" + value + "'/> " + value.split(".")[0];
  85. },
  86. formatResult: function(data, value) {
  87. return value.split(".")[0];
  88. }
  89. });
  90. $("#tags").autocomplete(["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "pearl"], {
  91. width: 320,
  92. max: 4,
  93. highlight: false,
  94. multiple: true,
  95. multipleSeparator: " ",
  96. scroll: true,
  97. scrollHeight: 300
  98. });
  99. $(":text, textarea").result(log).next().click(function() {
  100. $(this).prev().search();
  101. });
  102. $("#singleBirdRemote").result(function(event, data, formatted) {
  103. if (data)
  104. $(this).parent().next().find("input").val(data[1]);
  105. });
  106. $("#suggest4").result(function(event, data, formatted) {
  107. var hidden = $(this).parent().next().find(">:input");
  108. hidden.val( (hidden.val() ? hidden.val() + ";" : hidden.val()) + data[1]);
  109. });
  110.     $("#suggest15").autocomplete(cities, { scroll: true } );
  111. $("#scrollChange").click(changeScrollHeight);
  112. $("#thickboxEmail").autocomplete(emails, {
  113. minChars: 0,
  114. width: 310,
  115. matchContains: true,
  116. highlightItem: false,
  117. formatItem: function(row, i, max, term) {
  118. return row.name.replace(new RegExp("(" + term + ")", "gi"), "<strong>$1</strong>") + "<br><span style='font-size: 80%;'>Email: &lt;" + row.to + "&gt;</span>";
  119. },
  120. formatResult: function(row) {
  121. return row.to;
  122. }
  123. });
  124. $("#clear").click(function() {
  125. $(":input").unautocomplete();
  126. });
  127. });
  128.  
  129. function changeOptions(){
  130. var max = parseInt(window.prompt('请输入要显示项的数目:', jQuery.Autocompleter.defaults.max));
  131. if (max > 0) {
  132. $("#suggest1").setOptions({
  133. max: max
  134. });
  135. }
  136. }
  137.  
  138. function changeScrollHeight() {
  139.     var h = parseInt(window.prompt('请输入新的滚动高度(以像素为单位的数字):', jQuery.Autocompleter.defaults.scrollHeight));
  140.     if(> 0) {
  141.         $("#suggest1").setOptions({
  142. scrollHeight: h
  143. });
  144.     }
  145. }
  146.  
  147. function changeToMonths(){
  148. $("#suggest1")
  149. // 清除已有的数据
  150. .val("")
  151. // 改变本地数据为月份
  152. .setOptions({data: months})
  153. // 获取 label 标签
  154. .prev()
  155. // 更新 label 标签
  156. .text("月份(本地):");
  157. }
  158. </script>
  159. </head>
  160.  
  161. <body>
  162.  
  163. <h1 id="banner">jQuery Autocomplete 插件演示</h1>
  164.  
  165. <div id="content">
  166. <form autocomplete="off">
  167. <p>
  168. <label>单个城市(本地):</label>
  169. <input type="text" id="suggest1" />
  170. <input type="button" value="获取值" />
  171. <input type="button" value="改变最大项" onclick="changeOptions();" />
  172. <input type="button" value="改为月份数据" onclick="changeToMonths();" />
  173. <input type="button" value="改变滚动高度" id="scrollChange" />
  174. </p>
  175. <p>
  176. <label>月份(本地):</label>
  177. <input type="text" id="month" />
  178. <input type="button" value="获取值" />
  179. (当前月份已从列表中排除)
  180. </p>
  181. <p>
  182. <label>E-Mail(本地):</label>
  183. <input type="text" id="suggest13" />
  184. <input type="button" value="获取值" />
  185. </p>
  186. <p>
  187. <label>单只鸟(远程):</label>
  188. <input type="text" id="singleBirdRemote" />
  189. <input type="button" value="获取值" />
  190. </p>
  191. <p>
  192. <label>隐藏输入</label>
  193. <input />
  194. </p>
  195. <p>
  196. <label>单个城市(包含):</label>
  197. <input type="text" id="suggest14" />
  198. <input type="button" value="获取值" />
  199. </p>
  200. <p>
  201. <label>多个城市(本地):</label>
  202. <textarea id='suggest3' cols='40' rows='3'></textarea>
  203. <input type="button" value="获取值" />
  204. </p>
  205. <p>
  206. <label>多只鸟(远程):</label>
  207. <textarea id='suggest4'></textarea>
  208. <input type="button" value="获取值" />
  209. </p>
  210. <p>
  211. <label>隐藏输入</label>
  212. <textarea></textarea>
  213. </p>
  214.     <p>
  215. <label>图像搜索(远程):</label>
  216. <input type="text" id='imageSearch' />
  217. <input type="button" value="获取值" />
  218. </p>
  219.     <p>
  220. <label>标签(本地):</label>
  221. <input type="text" id='tags' />
  222. <input type="button" value="获取值" />
  223. </p>
  224. <p>
  225. <label>一些下拉选项(&lt;3 IE):</label>
  226. <select>
  227. <option value="">Item 12334455</option>
  228. <option value="2">Item 2</option>
  229. <option value="3">Item 3</option>
  230. <option value="4">Item 4</option>
  231. </select>
  232. </p>
  233. <input type="submit" value="提交" />
  234. </form>
  235. <p>
  236. <a href="#TB_inline?height=155&width=400&inlineId=modalWindow" class="thickbox">点击这里查看一个 ThickBox 窗口内的 Autocomplete..</a>(即使超出范围插件也会正常工作)
  237. </p>
  238. <div id="modalWindow" style="display: none;">
  239.                 <p>
  240.                         <label>E-Mail(本地):</label>
  241.                         <input type="text" id="thickboxEmail" />
  242.                         <input type="button" value="获取值" />
  243.                 </p>
  244. </div>
  245. <button id="clear">移除所有的 Autocomplete</button>
  246. <a href="http://jquery.bassistance.de/autocomplete/demo/search.phps">PHP 脚本用于远程的 Autocomplete</a>
  247. <h3>结果:</h3> <ol id="result"></ol>
  248.  
  249. </div>
  250.  
  251. </body>
  252. </html>