jquery.typeahead.js是一款高级的自动补全jQuery插件。该jquery自动补全插件提供超过50个配置选项和回调方法,用于完成自动补全功能,能够完成绝大部分表单自动补全的需求。

安装

可以通过npm或bower来安装jquery.typeahead.js插件。

bower install jquery-typeahead
npm install jquery-typeahead                  
                

使用方法

在页面中引入jquery、jquery.typeahead.min.js和jquery.typeahead.min.css文件。

<link rel="stylesheet" type="text/css" href="css/jquery.typeahead.min.css" />
<script src="js/jquery.min.js"></script>
<script src="js/jquery.typeahead.min.js"></script>
                
HTML结构

该jquery自动补全插件可以和bootstrap集成使用,基本的HTML结构如下:

<form>
    <div class="typeahead__container">
        <div class="typeahead__field">
 
            <span class="typeahead__query">
                <input class="js-typeahead"
                       name="q"
                       type="search"
                       autocomplete="off">
            </span>
            <span class="typeahead__button">
                <button type="submit">
                    <span class="typeahead__search-icon"></span>
                </button>
            </span>
 
        </div>
    </div>
</form>
                
初始化插件

初始化该jquery自动补全插件有两种方法:

方法一:通过$.typeahead()来初始化。(建议使用该方法)

$.typeahead({
    input: ".js-typeahead",
    order: "asc",
    source: {
        groupName: {
            // Ajax Request
            ajax: {
                url: "..."
            }
        }
    },
    callback: {
        onClickBefore: function () { ... }
    }
});         
                

方法二:通过唯一的input选择器来创建一个jQuery对象,然后在该对象上使用.typeahead()方法。

$('.js-typeahead').typeahead({
    order: "asc",
    source: {
        groupName: {
            // Array of Objects / Strings
            data: [ {...}, {...} ]
        }
    },
    callback: {
        onInit: function () { ... }
    }
});                  
                

配置参数

该jquery自动补全插件的可用配置参数如下:

/**
 * @private
 * Default options
 */
var _options = {
    input: null,            // *RECOMMENDED*, jQuery selector to reach Typeahead's input for initialization
    minLength: 2,           // Accepts 0 to search on focus, minimum character length to perform a search
    maxLength: false,       // False as "Infinity" will not put character length restriction for searching results
    maxItem: 8,             // Accepts 0 / false as "Infinity" meaning all the results will be displayed
    dynamic: false,         // When true, Typeahead will get a new dataset from the source option on every key press
    delay: 300,             // delay in ms when dynamic option is set to true
    order: null,            // "asc" or "desc" to sort results
    offset: false,          // Set to true to match items starting from their first character
    hint: false,            // Added support for excessive "space" characters
    accent: false,          // Will allow to type accent and give letter equivalent results, also can define a custom replacement object
    highlight: true,        // Added "any" to highlight any word in the template, by default true will only highlight display keys
    group: false,           // Improved feature, Boolean,string,object(key, template (string, function))
    groupOrder: null,       // New feature, order groups "asc", "desc", Array, Function
    maxItemPerGroup: null,  // Maximum number of result per Group
    dropdownFilter: false,  // Take group options string and create a dropdown filter
    dynamicFilter: null,    // Filter the typeahead results based on dynamic value, Ex: Players based on TeamID
    backdrop: false,        // Add a backdrop behind Typeahead results
    backdropOnFocus: false, // Display the backdrop option as the Typeahead input is :focused
    cache: false,           // Improved option, true OR 'localStorage' OR 'sessionStorage'
    ttl: 3600000,           // Cache time to live in ms
    compression: false,     // Requires LZString library
    searchOnFocus: false,   // Display search results on input focus
    blurOnTab: true,        // Blur Typeahead when Tab key is pressed, if false Tab will go though search results
    resultContainer: null,  // List the results inside any container string or jQuery object
    generateOnLoad: null,   // Forces the source to be generated on page load even if the input is not focused!
    mustSelectItem: false,  // The submit function only gets called if an item is selected
    href: null,             // String or Function to format the url for right-click & open in new tab on link results
    display: ["display"],   // Allows search in multiple item keys ["display1", "display2"]
    template: null,         // Display template of each of the result list
    templateValue: null,    // Set the input value template when an item is clicked
    groupTemplate: null,    // Set a custom template for the groups
    correlativeTemplate: false, // Compile display keys, enables multiple key search from the template string
    emptyTemplate: false,   // Display an empty template if no result
    cancelButton: true,     // If text is detected in the input, a cancel button will be available to reset the input (pressing ESC also cancels)
    loadingAnimation: true, // Display a loading animation when typeahead is doing request / searching for results
    filter: true,           // Set to false or function to bypass Typeahead filtering. WARNING: accent, correlativeTemplate, offset & matcher will not be interpreted
    matcher: null,          // Add an extra filtering function after the typeahead functions
    source: null,           // Source of data for Typeahead to filter
    callback: {
        onInit: null,               // When Typeahead is first initialized (happens only once)
        onReady: null,              // When the Typeahead initial preparation is completed
        onShowLayout: null,         // Called when the layout is shown
        onHideLayout: null,         // Called when the layout is hidden
        onSearch: null,             // When data is being fetched & analyzed to give search results
        onResult: null,             // When the result container is displayed
        onLayoutBuiltBefore: null,  // When the result HTML is build, modify it before it get showed
        onLayoutBuiltAfter: null,   // Modify the dom right after the results gets inserted in the result container
        onNavigateBefore: null,     // When a key is pressed to navigate the results, before the navigation happens
        onNavigateAfter: null,      // When a key is pressed to navigate the results
        onMouseEnter: null,         // When the mouse enter an item in the result list
        onMouseLeave: null,         // When the mouse leaves an item in the result list
        onClickBefore: null,        // Possibility to e.preventDefault() to prevent the Typeahead behaviors
        onClickAfter: null,         // Happens after the default clicked behaviors has been executed
        onDropdownFilter: null,     // When the dropdownFilter is changed, trigger this callback
        onSendRequest: null,        // Gets called when the Ajax request(s) are sent
        onReceiveRequest: null,     // Gets called when the Ajax request(s) are all received
        onPopulateSource: null,     // Perform operation on the source data before it gets in Typeahead data
        onCacheSave: null,          // Perform operation on the source data before it gets in Typeahead cache
        onSubmit: null,             // When Typeahead form is submitted
        onCancel: null              // Triggered if the typeahead had text inside and is cleared
    },
    selector: {
        container: "typeahead__container",
        result: "typeahead__result",
        list: "typeahead__list",
        group: "typeahead__group",
        item: "typeahead__item",
        empty: "typeahead__empty",
        display: "typeahead__display",
        query: "typeahead__query",
        filter: "typeahead__filter",
        filterButton: "typeahead__filter-button",
        dropdown: "typeahead__dropdown",
        dropdownItem: "typeahead__dropdown-item",
        button: "typeahead__button",
        backdrop: "typeahead__backdrop",
        hint: "typeahead__hint",
        cancelButton: "typeahead__cancel-button"
    },
    debug: false                    // Display debug information (RECOMMENDED for dev environment)
};                  
                

更多关于jquery.typeahead.js自动补全插件的信息,可以参考官方网站:http://www.runningcoder.org/jquerytypeahead/documentation/