Bootstrap Select是一个jQuery插件,通过多种选项增强默认的Bootstrap下拉选择,如:optgoup支持、自动完成、清除选择和实时过滤。
- # Yarn
- $ yarn add bootstrap-select
- # NPM
- $ npm install bootstrap-select --save
1.将jQuery Bootstrap Select插件和其他所需资源包含到您的Bootstrap页面中。
- <!-- Bootstrap Stylesheet -->
- <link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" />
- <!-- Bootstrap Select Stylesheet -->
- <link href="/path/to/bootstrap-select.min.css" rel="stylesheet">
- <!-- Bootstrap JavaScript -->
- <script src="/path/to/cdn/jquery.slim.min.js"></script>
- <script src="/path/to/cdn/bootstrap.min.js"></script>
- <!-- Bootstrap Select Main JavaScript -->
- <script src="/path/to/bootstrap-select.min.js"></script>
- <!-- Bootstrap Select Language JavaScript -->
- <script src="/path/to/i18n/defaults-LANGUAGE.min.js"></script>
2.只需将类“selectpicker”添加到您的select元素中即可。
- <select class="selectpicker">
- <option>1</option>
- <option>2</option>
- <option>3</option>
- <option>4</option>
- <option>5</option>
- </select>
3.您也可以通过调用“select”元素上的函数来初始化插件。
- $('select').selectpicker();
4.所有默认插件设置。
- $('select').selectpicker({
- // text for none selected
- noneSelectedText: 'Nothing selected',
- // text for no results
- noneResultsText: 'No results matched {0}',
- countSelectedText: function (numSelected, numTotal) {
- return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
- },
- // text for max options
- maxOptionsText: function (numAll, numGroup) {
- return [
- (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
- (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
- ];
- },
- // text for select all
- selectAllText: 'Select All',
- // text for deselect all
- deselectAllText: 'Deselect All',
- // enables done button
- doneButton: false,
- // text for done button
- doneButtonText: 'Close',
- // custom separator
- multipleSeparator: ', ',
- // basic class
- styleBase: 'btn',
- // button classes
- style: classNames.BUTTONCLASS,
- // 'auto' | integer | false
- size: 'auto',
- // title for dropdown select
- title: null,
- // values' | 'static' | 'count' | 'count > x'
- selectedTextFormat: 'values',
- // width
- width: false,
- // string | false
- container: false,
- // hides disabled options
- hideDisabled: false,
- // shows sub text
- showSubtext: false,
- // shows icons
- showIcon: true,
- // shows content
- showContent: true,
- // auto reposition to fit screen
- dropupAuto: true,
- // adds a header to the dropdown select
- header: false,
- // live filter options
- liveSearch: false,
- liveSearchPlaceholder: null,
- liveSearchNormalize: false,
- liveSearchStyle: 'contains',
- // shows Select All & Deselect All
- actionsBox: false,
- // icon base
- iconBase: 'glyphicon',
- // tick icon
- tickIcon: 'glyphicon-ok',
- // shows tick
- showTick: false,
- // custom template
- template: {
- caret: '<span class="caret"></span>'
- },
- // integer | false
- maxOptions: false,
- // enables the device's native select for the dropdown select
- mobile: false,
- // if true, treats the tab character like the enter or space characters within the selectpicker dropdown.
- selectOnTab: false,
- // boolean | 'auto'
- dropdownAlignRight: false,
- // padding
- windowPadding: 0,
- // If enabled, the items in the dropdown will be rendered using virtualization (i.e. only the items that are within the viewport will be rendered).
- // This drastically improves performance for selects with a large number of options.
- // Set to an integer to only use virtualization if the select has at least that number of options.
- virtualScroll: 600
- });
5.API方法。
- // Sets the selected value
- $('.selectpicker').selectpicker('val', 'Mustard');
- $('.selectpicker').selectpicker('val', ['Mustard','Relish']);
- // Selects all items
- $('.selectpicker').selectpicker('selectAll');
- // Deselects all items
- $('.selectpicker').selectpicker('deselectAll');
- // Re-renders the plugin
- $('.selectpicker').selectpicker('render')
- $('.selectpicker').selectpicker('render');
- // Enables mobile scrolling
- $('.selectpicker').selectpicker('mobile')
- // Modifies the class(es)
- $('.selectpicker').selectpicker('setStyle')
- // Replace Class
- $('.selectpicker').selectpicker('setStyle', 'btn-danger');
- // Add Class
- $('.selectpicker').selectpicker('setStyle', 'btn-large', 'add');
- // Remove Class
- $('.selectpicker').selectpicker('setStyle', 'btn-large', 'remove');
- // Programmatically updates a select
- $('.selectpicker').selectpicker('refresh')
- // Programmatically toggles the select
- $('.selectpicker').selectpicker('toggle')
- // Hides the select
- $('.selectpicker').selectpicker('hide')
- // Shows the select
- $('.selectpicker').selectpicker('show')
- // Destroy the select
- $('.selectpicker').selectpicker('destroy')
6.可用的事件处理程序。
- $('.selectpicker').on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
- // do something...
- });
- $('.selectpicker').on('show.bs.select', function (relatedTarget) {
- // do something...
- });
- $('.selectpicker').on('shown.bs.select', function (relatedTarget) {
- // do something...
- });
- $('.selectpicker').on('hide.bs.select', function (relatedTarget) {
- // do something...
- });
- $('.selectpicker').on('hidden.bs.select', function (relatedTarget) {
- // do something...
- });
- $('.selectpicker').on('loaded.bs.select', function () {
- // do something...
- });
- $('.selectpicker').on('rendered.bs.select', function () {
- // do something...
- });
- $('.selectpicker').on('refreshed.bs.select', function () {
- // do something...
- });
7.要使用远程数据源,您需要在文档中加载Ajax Bootstrap Select扩展。
- <link rel="stylesheet" href="/dist/css/ajax-bootstrap-select.css"/>
- <script src="/dist/js/ajax-bootstrap-select.js"></script>
8.添加数据实时搜索
属性。
- <select id="selectpicker" class="selectpicker" data-live-search="true">
- ...
- </select>
9.使用AJAX从远程数据源获取选项的示例JavaScript。
- var options = {
- ajax : {
- url : '/ajax',
- type : 'POST',
- dataType: 'json',
- // Use "{{{q}}}" as a placeholder and Ajax Bootstrap Select will
- // automatically replace it with the value of the search query.
- data : {
- q: '{{{q}}}'
- }
- },
- locale : {
- emptyTitle: 'Select and Begin Typing'
- },
- log : 3,
- preprocessData: function (data) {
- var i, l = data.length, array = [];
- if (l) {
- for (i = 0; i < l; i++) {
- array.push($.extend(true, data[i], {
- text : data[i].Name,
- value: data[i].Email,
- data : {
- subtext: data[i].Email
- }
- }));
- }
- }
- // You must always return a valid array when processing data. The
- // data argument passed is a clone and cannot be modified directly.
- return array;
- }
- };
- $('.selectpicker').selectpicker().filter('.with-ajax').ajaxSelectPicker(options);
10.自定义Ajax Bootstrap Select扩展的所有可能选项。
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @deprecated Since version `1.2.0`, see: {@link $.fn.ajaxSelectPicker.defaults#preprocessData}.
- * @cfg {Function} ajaxResultsPreHook
- */
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Object} ajax (required)
- * @markdown
- * The options to pass to the jQuery AJAX request.
- *
- * ```js
- * {
- * url: null, // Required.
- * type: 'POST',
- * dataType: 'json',
- * data: {
- * q: '{{{q}}}'
- * }
- * }
- * ```
- */
- ajax: {
- url: null,
- type: 'POST',
- dataType: 'json',
- data: {
- q: '{{{q}}}'
- }
- },
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Number} minLength = 0
- * @markdown
- * Invoke a request for empty search values.
- */
- minLength: 0,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {String} ajaxSearchUrl
- * @deprecated Since version `1.2.0`, see: {@link $.fn.ajaxSelectPicker.defaults#ajax}.
- */
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {String} bindEvent = "keyup"
- * @markdown
- * The event to bind on the search input element to fire a request.
- */
- bindEvent: 'keyup',
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} cache = true
- * @markdown
- * Cache previous requests. If enabled, the "enter" key (13) is enabled to
- * allow users to force a refresh of the request.
- */
- cache: true,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} clearOnEmpty = true
- * @markdown
- * Clears the previous results when the search input has no value.
- */
- clearOnEmpty: true,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} clearOnError = true
- * @markdown
- * Clears the select list when the request returned with an error.
- */
- clearOnError: true,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} debug
- * @deprecated Since version `1.2.0`, see: {@link $.fn.ajaxSelectPicker.defaults#log}.
- */
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} emptyRequest = false
- * @markdown
- * Invoke a request for empty search values.
- */
- emptyRequest: false,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Object} ignoredKeys
- * @markdown
- * Key codes to ignore so a request is not invoked with bindEvent. The
- * "enter" key (13) will always be dynamically added to any list provided
- * unless the "cache" option above is set to "true".
- *
- * ```js
- * {
- * 9: "tab",
- * 16: "shift",
- * 17: "ctrl",
- * 18: "alt",
- * 27: "esc",
- * 37: "left",
- * 39: "right",
- * 38: "up",
- * 40: "down",
- * 91: "meta"
- * }
- * ```
- */
- ignoredKeys: {
- 9: "tab",
- 16: "shift",
- 17: "ctrl",
- 18: "alt",
- 27: "esc",
- 37: "left",
- 39: "right",
- 38: "up",
- 40: "down",
- 91: "meta"
- },
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {String} langCode = null
- * @markdown
- * The language code to use for string translation. By default this value
- * is determined by the browser, however it is not entirely reliable. If
- * you encounter inconsistencies, you may need to manually set this option.
- */
- langCode: null,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Object} locale = null
- * @markdown
- * Provide specific overrides for {@link $.fn.ajaxSelectPicker.locale locale string} translations. Values
- * set here will cause the plugin to completely ignore defined locale string
- * translations provided by the set language code. This is useful when
- * needing to change a single value or when being used in a system that
- * provides its own translations, like a CMS.
- *
- * ```js
- * locale: {
- * searchPlaceholder: Drupal.t('Find...')
- * }
- * ```
- */
- locale: null,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {String|Number|Number} log = 'error'
- * @markdown
- * Determines the amount of logging that is displayed:
- *
- * - __0, false:__ Display no information from the plugin.
- * - __1, 'error':__ Fatal errors that prevent the plugin from working.
- * - __2, 'warn':__ Warnings that may impact the display of request data, but does not prevent the plugin from functioning.
- * - __3, 'info':__ Provides additional information, generally regarding the from request data and callbacks.
- * - __4, true, 'debug':__ Display all possible information. This will likely be highly verbose and is only recommended for development purposes or tracing an error with a request.
- */
- log: 'error',
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} mixWithCurrents
- * @deprecated Since version `1.2.0`, see: {@link $.fn.ajaxSelectPicker.defaults#preserveSelected}.
- */
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg placeHolderOption
- * @deprecated Since version `1.2.0`, see: {@link $.fn.ajaxSelectPicker.locale#emptyTitle}.
- */
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Function|null} preprocessData = function(){}
- * @markdown
- * Process the raw data returned from a request.
- *
- * The following arguments are passed to this callback:
- *
- * - __data__ - `Array` The raw data returned from the request, passed by reference.
- *
- * This callback must return one of the following:
- *
- * - `Array` - A new array of items. This will replace the passed data.
- * - `undefined|null|false` - Stops the callback and will use whatever modifications have been made to data.
- *
- * ```js
- * function (data) {
- * var new = [], old = [], other = [];
- * for (var i = 0; i < data.length; i++) {
- * // Add items flagged as "new" to the correct array.
- * if (data[i].new) {
- * new.push(data[i]);
- * }
- * // Add items flagged as "old" to the correct array.
- * else if (data[i].old) {
- * old.push(data[i]);
- * }
- * // Something out of the ordinary happened, put these last.
- * else {
- * other.push(data[i]);
- * }
- * }
- * // Sort the data according to the order of these arrays.
- * return [].concat(new, old, other).
- * }
- * ```
- */
- preprocessData: function () { },
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} preserveSelected = true
- * @markdown
- * Preserve selected items(s) between requests. When enabled, they will be
- * placed in an `<optgroup>` with the label `Currently Selected`. Disable
- * this option if you send your currently selected items along with your
- * request and let the server handle this responsibility.
- */
- preserveSelected: true,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {String} preserveSelectedPosition = 'after'
- * @markdown
- * Place the currently selected options `'before'` or `'after'` the options
- * returned from the request.
- */
- preserveSelectedPosition: 'after',
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Function|null} processData = function(){}
- * @markdown
- * Process the data returned after this plugin, but before the list is built.
- */
- processData: function () { },
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Number} requestDelay = 300
- * @markdown
- * The amount of time, in milliseconds, that must pass before a request
- * is initiated. Each time the {@link $.fn.ajaxSelectPicker.defaults#bindEvent bindEvent} is fired, it will cancel the
- * current delayed request and start a new one.
- */
- requestDelay: 300,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Boolean} restoreOnError = false
- * @markdown
- * Restores the select list with the previous results when the request
- * returns with an error.
- */
- restoreOnError: false,
- /**
- * @member $.fn.ajaxSelectPicker.defaults
- * @cfg {Object} templates
- * @markdown
- * The DOM templates used in this plugin.
- *
- * ```js
- * templates: {
- * // The placeholder for status updates pertaining to the list and request.
- * status: '<div class="status"></div>',
- * }
- * ```
- */
- templates: {
- status: '<div class="status"></div>'
- }
v1.14.0测试版3(2022-04-21)
v1.14.0beta (2021-03-26)
v1.13.18 (2020-06-27)
v1.13.17 (2020-05-08)
v1.13.16 (2020-04-25)
v1.13.15 (2020-04-21)
v1.13.14 (2020-04-18)
v1.13.13 (2020-04-17)
v1.13.12 (2019-10-11)
v1.13.11 (2019-09-20)
v1.13.10 (2019-04-20)
v1.13.9 (2019-03-30)
v1.13.8 (2019-03-16)
v1.13.7 (2019-03-13)
v1.13.6 (2019-03-10)
v1.13.5(2018年12月12日)
v1.13.4(2018年12月12日)
v1.13.3(2018年10月26日)
v1.13.2 (2018-09-16)
v1.13.1(2018年8月25日)
v1.13.0(2018年4月19日)
2018-04-14
2018-03-13
2018-03-09
2018-03-07
2018-01-11
2017-02-21
2015-11-28
2015-11-24
Â