jQuery Autocomplete 插件根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择。通过给 Autocomplete 字段焦点或者在其中输入字符,插件开始搜索匹配的条目并显示供选择的值的列表。通过输入更多的字符,用户可以过滤列表以获得更好的匹配。
该插件现在是 jQuery UI 的一部分,独立的版本不会再更新了。目前版本是 1.6。
jQuery Autocomplete 插件演示。
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>jQuery Autocomplete 插件</title>
- <script type="text/javascript" src="http://jquery.bassistance.de/autocomplete/lib/jquery.js"></script>
- <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/jquery.bgiframe.min.js'></script>
- <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/jquery.ajaxQueue.js'></script>
- <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/lib/thickbox-compressed.js'></script>
- <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/jquery.autocomplete.js'></script>
- <script type='text/javascript' src='http://jquery.bassistance.de/autocomplete/demo/localdata.js'></script>
- <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/demo/main.css" />
- <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/jquery.autocomplete.css" />
- <link rel="stylesheet" type="text/css" href="http://jquery.bassistance.de/autocomplete/lib/thickbox.css" />
- <script type="text/javascript">
- $().ready(function() {
- function log(event, data, formatted) {
- $("<li>").html( !data ? "No match!" : "Selected: " + formatted).appendTo("#result");
- }
- function formatItem(row) {
- return row[0] + " (<strong>id: " + row[1] + "</strong>)";
- }
- function formatResult(row) {
- return row[0].replace(/(<.+?>)/gi, '');
- }
- $("#suggest1").focus().autocomplete(cities);
- $("#month").autocomplete(months, {
- minChars: 0,
- max: 12,
- autoFill: true,
- mustMatch: true,
- matchContains: false,
- scrollHeight: 220,
- formatItem: function(data, i, total) {
- // 不在值列表中显示当前月份(无论何种原因)
- if ( data[0] == months[new Date().getMonth()] )
- return false;
- return data[0];
- }
- });
- $("#suggest13").autocomplete(emails, {
- minChars: 0,
- width: 310,
- matchContains: "word",
- autoFill: false,
- formatItem: function(row, i, max) {
- return i + "/" + max + ": \"" + row.name + "\" [" + row.to + "]";
- },
- formatMatch: function(row, i, max) {
- return row.name + " " + row.to;
- },
- formatResult: function(row) {
- return row.to;
- }
- });
- $("#singleBirdRemote").autocomplete("search.php", {
- width: 260,
- selectFirst: false
- });
- $("#suggest14").autocomplete(cities, {
- matchContains: true,
- minChars: 0
- });
- $("#suggest3").autocomplete(cities, {
- multiple: true,
- mustMatch: true,
- autoFill: true
- });
- $("#suggest4").autocomplete('search.php', {
- width: 300,
- multiple: true,
- matchContains: true,
- formatItem: formatItem,
- formatResult: formatResult
- });
- $("#imageSearch").autocomplete("images.php", {
- width: 320,
- max: 4,
- highlight: false,
- scroll: true,
- scrollHeight: 300,
- formatItem: function(data, i, n, value) {
- return "<img src='images/" + value + "'/> " + value.split(".")[0];
- },
- formatResult: function(data, value) {
- return value.split(".")[0];
- }
- });
- $("#tags").autocomplete(["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "pearl"], {
- width: 320,
- max: 4,
- highlight: false,
- multiple: true,
- multipleSeparator: " ",
- scroll: true,
- scrollHeight: 300
- });
- $(":text, textarea").result(log).next().click(function() {
- $(this).prev().search();
- });
- $("#singleBirdRemote").result(function(event, data, formatted) {
- if (data)
- $(this).parent().next().find("input").val(data[1]);
- });
- $("#suggest4").result(function(event, data, formatted) {
- var hidden = $(this).parent().next().find(">:input");
- hidden.val( (hidden.val() ? hidden.val() + ";" : hidden.val()) + data[1]);
- });
- $("#suggest15").autocomplete(cities, { scroll: true } );
- $("#scrollChange").click(changeScrollHeight);
- $("#thickboxEmail").autocomplete(emails, {
- minChars: 0,
- width: 310,
- matchContains: true,
- highlightItem: false,
- formatItem: function(row, i, max, term) {
- return row.name.replace(new RegExp("(" + term + ")", "gi"), "<strong>$1</strong>") + "<br><span style='font-size: 80%;'>Email: <" + row.to + "></span>";
- },
- formatResult: function(row) {
- return row.to;
- }
- });
- $("#clear").click(function() {
- $(":input").unautocomplete();
- });
- });
- function changeOptions(){
- var max = parseInt(window.prompt('请输入要显示项的数目:', jQuery.Autocompleter.defaults.max));
- if (max > 0) {
- $("#suggest1").setOptions({
- max: max
- });
- }
- }
- function changeScrollHeight() {
- var h = parseInt(window.prompt('请输入新的滚动高度(以像素为单位的数字):', jQuery.Autocompleter.defaults.scrollHeight));
- if(h > 0) {
- $("#suggest1").setOptions({
- scrollHeight: h
- });
- }
- }
- function changeToMonths(){
- $("#suggest1")
- // 清除已有的数据
- .val("")
- // 改变本地数据为月份
- .setOptions({data: months})
- // 获取 label 标签
- .prev()
- // 更新 label 标签
- .text("月份(本地):");
- }
- </script>
- </head>
- <body>
- <h1 id="banner">jQuery Autocomplete 插件演示</h1>
- <div id="content">
- <form autocomplete="off">
- <p>
- <label>单个城市(本地):</label>
- <input type="text" id="suggest1" />
- <input type="button" value="获取值" />
- <input type="button" value="改变最大项" onclick="changeOptions();" />
- <input type="button" value="改为月份数据" onclick="changeToMonths();" />
- <input type="button" value="改变滚动高度" id="scrollChange" />
- </p>
- <p>
- <label>月份(本地):</label>
- <input type="text" id="month" />
- <input type="button" value="获取值" />
- (当前月份已从列表中排除)
- </p>
- <p>
- <label>E-Mail(本地):</label>
- <input type="text" id="suggest13" />
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>单只鸟(远程):</label>
- <input type="text" id="singleBirdRemote" />
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>隐藏输入</label>
- <input />
- </p>
- <p>
- <label>单个城市(包含):</label>
- <input type="text" id="suggest14" />
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>多个城市(本地):</label>
- <textarea id='suggest3' cols='40' rows='3'></textarea>
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>多只鸟(远程):</label>
- <textarea id='suggest4'></textarea>
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>隐藏输入</label>
- <textarea></textarea>
- </p>
- <p>
- <label>图像搜索(远程):</label>
- <input type="text" id='imageSearch' />
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>标签(本地):</label>
- <input type="text" id='tags' />
- <input type="button" value="获取值" />
- </p>
- <p>
- <label>一些下拉选项(<3 IE):</label>
- <select>
- <option value="">Item 12334455</option>
- <option value="2">Item 2</option>
- <option value="3">Item 3</option>
- <option value="4">Item 4</option>
- </select>
- </p>
- <input type="submit" value="提交" />
- </form>
- <p>
- <a href="#TB_inline?height=155&width=400&inlineId=modalWindow" class="thickbox">点击这里查看一个 ThickBox 窗口内的 Autocomplete..</a>(即使超出范围插件也会正常工作)
- </p>
- <div id="modalWindow" style="display: none;">
- <p>
- <label>E-Mail(本地):</label>
- <input type="text" id="thickboxEmail" />
- <input type="button" value="获取值" />
- </p>
- </div>
- <button id="clear">移除所有的 Autocomplete</button>
- <a href="http://jquery.bassistance.de/autocomplete/demo/search.phps">PHP 脚本用于远程的 Autocomplete</a>
- <h3>结果:</h3> <ol id="result"></ol>
- </div>
- </body>
- </html>