MagicSuggest是一个易于使用的jQuery插件,用于创建一个组合列表,使您能够从下拉列表中选择多个项目(例如标签、令牌、电子邮件地址等),并支持打字和自动完成。
1.在网页的头部加载jQueryMagicSugest插件的CSS和Bootstrap的样式表。
<link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" /> <link href="magicsuggest.css" rel="stylesheet" />
2.创建一个空容器,您想在其中生成组合列表。
<div id="example" class="form-control"></div>
3.在文档末尾加载jQuery JavaScript库和jQuery MagicSuguest插件的JavaScript。
<script src="/path/to/cdn/jquery.min.js"></script> <script src="magicsuggest.js"></script>
4.准备用于填充组合框的JSON数据。这里有3个选项:
var myData = ['New York','Los Angeles','Chicago', ...]
5.初始化jQuery MagicSuggest插件,并用您自己的数据填充组合列表。
$(function() { var instance = $('#example').magicSuggest({ data: myData }); });
6.使用自定义模板提供
作用
$(function() { var instance = $('#example').magicSuggest({ data: myData, renderer: function(data){ return '<div style="padding: 5px; overflow:hidden;">' + '<div style="float: left;"><img src="' + data.picture + '" /></div>' + '<div style="float: left; margin-left: 5px">' + '<div style="font-weight: bold; color: #333; font-size: 10px; line-height: 11px">' + data.name + '</div>' + '<div style="color: #999; font-size: 9px">' + data.email + '</div>' + '</div>' + '</div><div style="clear:both;"></div>'; // make sure we have closed our dom stuff } }); });
7.所有默认配置选项、功能和回调。
/********** CONFIGURATION PROPERTIES ************/ /** * Restricts or allows the user to validate typed entries. * Defaults to true. */ allowFreeEntries: true, /** * Restricts or allows the user to add the same entry more than once * Defaults to false. */ allowDuplicates: false, /** * Additional config object passed to each $.ajax call */ ajaxConfig: {}, /** * If a single suggestion comes out, it is preselected. */ autoSelect: true, /** * Auto select the first matching item with multiple items shown */ selectFirst: false, /** * Allow customization of query parameter */ queryParam: 'query', /** * A function triggered just before the ajax request is sent, similar to jQuery */ beforeSend: function(){ }, /** * A custom CSS class to apply to the field's underlying element. */ cls: '', /** * JSON Data source used to populate the combo box. 3 options are available here: * No Data Source (default) * When left null, the combo box will not suggest anything. It can still enable the user to enter * multiple entries if allowFreeEntries is * set to true (default). * Static Source * You can pass an array of JSON objects, an array of strings or even a single CSV string as the * data source.For ex. data: [* {id:0,name:"Paris"}, {id: 1, name: "New York"}] * You can also pass any json object with the results property containing the json array. * Url * You can pass the url from which the component will fetch its JSON data.Data will be fetched * using a POST ajax request that will * include the entered text as 'query' parameter. The results * fetched from the server can be: * - an array of JSON objects (ex: [{id:...,name:...},{...}]) * - a string containing an array of JSON objects ready to be parsed (ex: "[{id:...,name:...},{...}]") * - a JSON object whose data will be contained in the results property * (ex: {results: [{id:...,name:...},{...}] * Function * You can pass a function which returns an array of JSON objects (ex: [{id:...,name:...},{...}]) * The function can return the JSON data or it can use the first argument as function to handle the data. * Only one (callback function or return value) is needed for the function to succeed. * See the following example: * function (response) { var myjson = [{name: 'test', id: 1}]; response(myjson); return myjson; } */ data: null, /** * Additional parameters to the ajax call */ dataUrlParams: {}, /** * Start the component in a disabled state. */ disabled: false, /** * Name of JSON object property that defines the disabled behaviour */ disabledField: null, /** * Name of JSON object property displayed in the combo list */ displayField: 'name', /** * Set to false if you only want mouse interaction. In that case the combo will * automatically expand on focus. */ editable: true, /** * Set starting state for combo. */ expanded: false, /** * Automatically expands combo on focus. */ expandOnFocus: false, /** * JSON property by which the list should be grouped */ groupBy: null, /** * Set to true to hide the trigger on the right */ hideTrigger: false, /** * Set to true to highlight search input within displayed suggestions */ highlight: true, /** * A custom ID for this component */ id: null, /** * A class that is added to the info message appearing on the top-right part of the component */ infoMsgCls: '', /** * Additional parameters passed out to the INPUT tag. Enables usage of AngularJS's custom tags for ex. */ inputCfg: {}, /** * The class that is applied to show that the field is invalid */ invalidCls: 'ms-inv', /** * Set to true to filter data results according to case. Useless if the data is fetched remotely */ matchCase: false, /** * Once expanded, the combo's height will take as much room as the # of available results. * In case there are too many results displayed, this will fix the drop down height. */ maxDropHeight: 290, /** * Defines how long the user free entry can be. Set to null for no limit. */ maxEntryLength: null, /** * A function that defines the helper text when the max entry length has been surpassed. */ maxEntryRenderer: function(v) { return 'Please reduce your entry by ' + v + ' character' + (v > 1 ? 's':''); }, /** * The maximum number of results displayed in the combo drop down at once. */ maxSuggestions: null, /** * The maximum number of items the user can select if multiple selection is allowed. * Set to null to remove the limit. */ maxSelection: 10, /** * A function that defines the helper text when the max selection amount has been reached. The function has a single * parameter which is the number of selected elements. */ maxSelectionRenderer: function(v) { return 'You cannot choose more than ' + v + ' item' + (v > 1 ? 's':''); }, /** * The method used by the ajax request. */ method: 'POST', /** * The minimum number of characters the user must type before the combo expands and offers suggestions. */ minChars: 0, /** * A function that defines the helper text when not enough letters are set. The function has a single * parameter which is the difference between the required amount of letters and the current one. */ minCharsRenderer: function(v) { return 'Please type ' + v + ' more character' + (v > 1 ? 's':''); }, /** * Whether or not sorting / filtering should be done remotely or locally. * Use either 'local' or 'remote' */ mode: 'local', /** * The name used as a form element. */ name: null, /** * The text displayed when there are no suggestions. */ noSuggestionText: 'No suggestions', /** * The default placeholder text when nothing has been entered */ placeholder: 'Type or click here', /** * A function used to define how the items will be presented in the combo */ renderer: null, /** * Whether or not this field should be required */ required: false, /** * Set to true to render selection as a delimited string */ resultAsString: false, /** * Text delimiter to use in a delimited string. */ resultAsStringDelimiter: ',', /** * Name of JSON object property that represents the list of suggested objects */ resultsField: 'results', /** * A custom CSS class to add to a selected item */ selectionCls: '', /** * An optional element replacement in which the selection is rendered */ selectionContainer: null, /** * Where the selected items will be displayed. Only 'right', 'bottom' and 'inner' are valid values */ selectionPosition: 'inner', /** * A function used to define how the items will be presented in the tag list */ selectionRenderer: null, /** * Set to true to stack the selectioned items when positioned on the bottom * Requires the selectionPosition to be set to 'bottom' */ selectionStacked: false, /** * Direction used for sorting. Only 'asc' and 'desc' are valid values */ sortDir: 'asc', /** * name of JSON object property for local result sorting. * Leave null if you do not wish the results to be ordered or if they are already ordered remotely. */ sortOrder: null, /** * If set to true, suggestions will have to start by user input (and not simply contain it as a substring) */ strictSuggest: false, /** * Custom style added to the component container. */ style: '', /** * If set to true, the combo will expand / collapse when clicked upon */ toggleOnClick: false, /** * Amount (in ms) between keyboard registers. */ typeDelay: 400, /** * If set to true, tab won't blur the component but will be registered as the ENTER key */ useTabKey: false, /** * If set to true, using comma will validate the user's choice */ useCommaKey: true, /** * Determines whether or not the results will be displayed with a zebra table style */ useZebraStyle: false, /** * initial value for the field */ value: null, /** * name of JSON object property that represents its underlying value */ valueField: 'id', /** * regular expression to validate the values against */ vregex: null, /** * type to validate against */ vtype: null
8.API方法。
var instance = $('#example').magicSuggest({ // options here }); // adds items to the selection instance.addToSelection([object] objs, [boolean] silent) // clears the selection instance.clear([boolean] silent) // collapses the combo list instance.collapse([boolean] silent) // disables the combo list instance.disable() // removes what the user was typing instance.empty() // enables the compolist instance.enable() // expands the component instance.expand() // returns the combo suggestions instance.getData() // returns the status of the component instance.isDisabled() // checks if the selection is valid instance.isValid() // returns the list of extra URL paramaters set for AJAX requests instance.getDataUrlParams() // returns the name used for HTML form submission instance.getName() // returns an array of selected JSON objects instance.getSelection() // returns the current text being entered by the user instance.getRawValue() // returns an array containing only the selected JSON values instance.getValue() // removes items from the selection instance.removeFromSelection([object] objs, [boolean] silent) // sets the objects listed in the combo instance.setData([array] cbItems) // sets the name to be used for form submission instance.setName([string] name) // sets the selection with a given array of objects instance.setSelection(object[]) // sets the selection according to given values instance.setValue([array] ids) // sets extra parameters for AJAX requests instance.setDataUrlParams([object] params)
9.事件。
var instance = $('#example').magicSuggest({ // options here }); instance.on( "beforeload", function(e, this) { // fired before the AJAX request is performed }); instance.on( "blur", function(e, this) { // fired when the component looses focus }); instance.on( "collapse", function(e, this) { // fired when the combo is collapsed }); instance.on( "expand", function(e, this) { // fired when the combo is expanded }); instance.on( "focus", function(e, this) { // fired when the combo gains focus }); instance.on( "keydown", function(e, this, keyevent) { // fired when the user presses a key }); instance.on( "keyup", function(e, this, keyevent) { // fired when the user releases a key }); instance.on( "load", function(e, this, records[]) { // fired when the AJAX request has been performed }); instance.on( "selectionchange", function(e, this, records[]) { // fired when the user has changed the selection }); instance.on( "triggerclick", function(e, this) { // fired when the user has changed the selection });
v2.1.6版本(2022-04-01)
v2.1.5版本(2020-10-31)
2020-10-30
2020-10-15
2020-10-08