JavaScript
Запустите Bootstrap с нашими дополнительными плагинами JavaScript построенными на jQuery. Узнайте о каждом плагине, наших данных и программных API-интерфейсах и т.п.
Индивидуальные или компилированные
Плагины можно подключать по одному (файлами js/dist/*.js
) или все сразу – с помощью bootstrap.js
или «облегченного» bootstrap.min.js
(не подключайте оба сразу).
Если вы используете например, Webpack, Rollup..., то вы можете использовать файлы /js/dist/*.js
готовые к UMD.
Зависимости
Некоторые плагины и компоненты CSS зависят от других плагинов. Если вы подключаете плагины по одному, проверьте существование зависимостей в документации. Также заметим, что все плагины зависят от jQuery (т.е. в файле HTML jQuery надо подключать перед плагинами). Загляните сюда bower.json
для получения информации по поддерживаемым версиям jQuery.
Всплывающие подсказки (по наведению) и «всплывающие окна» (по клику мыши) зависят от библиотеки Popper.js.
Атрибуты данных
все плагины Bootstrap можно подключить и настроить в HTML через дата-атрибуты Bootstrap «предпочитает» этот метод использования функционала JS. Удостоверьтесь, что в одном элементе используется лишь один набор атрибутов (т.е., не получится запустить всплывающие подсказки и «всплывающие окна» из одной кнопки).
Однако иногда может понадобиться выключить эту способность. Для выключения API атрибута, «открепите» все обработчики событий документа, лежащие в пространстве имен data-api
:
$(document).off('.data-api')
В качестве альтернативы, чтобы настроить таргетинг на конкретный плагин, просто включите имя плагина в качестве пространства имен вместе с пространством имен data-api следующим образом:
$(document).off('.alert.data-api')
Селекторы
В настоящее время для запроса элементов DOM мы используем собственные методы querySelector
и querySelectorAll
по соображениям производительности, поэтому вы должны использовать допустимые селекторы.
Если вы используете специальные селекторы, например: collapse:Example
, обязательно избегайте их.
События
Bootstrap предлагает ряд собственных событий для уникальных действий большинства плагинов. В целом, эти события обозначаются инфинитивом и прошедшей формой причастия – где инфинитив (например, show
) запускается в начале события, а его причастие (например, shown
) – по окончанию события.
Все инфинитивные события предоставляют функциональные возможности preventDefault()
. Это дает возможность остановить выполнение действия до его начала. Возвращение false из обработчика событий также автоматически вызовет preventDefault()
.
$('#myModal').on('show.bs.modal', function (event) {
if (!data) {
return event.preventDefault() // останавливает отображение модального окна
}
})
Программный API
Мы также считаем, что у Вас должна быть возможность использовать все плагины Bootstrap исключительно через JavaScript API. Все общедоступные API-интерфейсы представляют собой единые, объединяемые в цепочки методы и возвращают коллекцию, на которую были выполнены действия.
$('.btn.danger').button('toggle').addClass('fat')
Все методы должны принимать необязательный объект параметров, строку, нацеленную на конкретный метод, или ничего (что запускает плагин с поведением по умолчанию):
$('#myModal').modal() // инициализирован по умолчанию
$('#myModal').modal({ keyboard: false }) // инициализирован без клавиатуры
$('#myModal').modal('show') // немедленно инициализирует и вызывает show
Каждый плагин также предоставляет свой необработанный конструктор Constructor
в свойстве: $.fn.popover.Constructor
. Если Вы хотите получить конкретный экземпляр плагина, получите его прямо из элемента: $('[rel="popover"]').data('popover')
.
Асинхронные функции и библиотека «переходов»
Все программные методы API асинхронны и возвращаются вызывающей стороне после начала перехода, но до его завершения.
Чтобы выполнить действие после завершения перехода, Вы можете прослушать соответствующее событие.
$('#myCollapse').on('shown.bs.collapse', function (event) {
// Действие, выполняемое после раскрытия сворачиваемой области
})
Кроме того, вызов метода переходного компонента будет проигнорирован.
$('#myCarousel').on('slid.bs.carousel', function (event) {
$('#myCarousel').carousel('2') // Перейдет к слайду 2, как только переход к слайду 1 завершится
})
$('#myCarousel').carousel('1') // Начнется переход к слайду 1 и вернется к вызывающему
$('#myCarousel').carousel('2') // !! Будет проигнорировано, так как переход к слайду 1 не завершен !!
Установки по умолчанию
Вы можете изменить их для плагина, изменяя объект плагина Constructor.Default
:
// изменяет значение по умолчанию для опции `keyboard` модального плагина на false
$.fn.modal.Constructor.Default.keyboard = false
Конфликты
Иногда необходимо использовать плагины Bootstrap с другими фреймворками пользовательского интерфейса. При этом могут возникнуть проблемы в пространствах имен. В этом случае вы можете вызвать метод .noConflict
в плагине, значение которого вы хотите переназначить.
var bootstrapButton = $.fn.button.noConflict() // вернуть $.fn.button к ранее присвоенному значению
$.fn.bootstrapBtn = bootstrapButton // дать $().bootstrapBtn функциональность Bootstrap
Версии
Версия каждого плагина jQuery может быть узнана через свойство конструктора плагина VERSION
. Например, для плагина всплывающих подсказок:
$.fn.tooltip.Constructor.VERSION // => "4.6.1"
В BS4 нет т.н. fallback’a (т.е. «резервных» стилей для случая «глобальной поломки» верстки на старых браузерах), когда отключен JS
Плагины Bootstrap частично не смогут «подстроить» функциональность вашего сайта в соответствии с параметрами отображения старого браузера, если юзер зайдет на него с такового, или в случае «уничтожения» или «зависания» части кода т.е. на старых браузерах BS4 может не сработать, если там отключен JS. Если вы хотите подсказать юзеру, что делать в таком случае, используйте тэг <noscript>
для пояснений о пере-включении JS.
Сторонние библиотеки
Официально Bootstrap не поддерживает сторонние JavaScript библиотеки, такие как Prototype или UI-jQuery. Несмотря на использование .noConflict
и группированных по функциональности обработчиков событий, при подключении сторонних библиотек могут возникнуть проблемы при компиляции, которые Вам нужно исправить самостоятельно.
Util
Весь JS в Bootstrap зависит от util.js
, который должен подключаться среди прочих JS-файлов, кроме случаев, когда вы пользуетесь компилированным или «облегченным» bootstrap.js
– потому что в этом случае он уже подключен.
util.js
содержит полезные функции и базовый справочник для событий transitionEnd
и эмулятор «переходов» CSS. Этот файл используется другими плагинами для проверки существования поддержки.
"Антисептик"
Всплывающие подсказки и всплывающие окна используют наше встроенное средство очистки для очистки параметров, принимающих HTML.
Значение по умолчанию whiteList
следующее:
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// Глобальные атрибуты разрешены для любого указанного ниже элемента.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
Если Вы хотите добавить новые значения в этот белый список whiteList
по умолчанию, Вы можете сделать следующее:
var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList
// Разрешить элементы таблицы
myDefaultWhiteList.table = []
// Чтобы разрешить элементы td и атрибуты параметров данных в элементах td
myDefaultWhiteList.td = ['data-option']
// Вы можете отправить собственное регулярное выражение для проверки своих атрибутов.
// Будьте осторожны, чтобы Ваши регулярные выражения были слишком слабыми
var myCustomRegex = /^data-my-app-[\w-]+/
myDefaultWhiteList['*'].push(myCustomRegex)
Если Вы хотите обойти наше средство очистки, потому что предпочитаете использовать специальную библиотеку, например DOMPurify, Вам следует сделать следующее:
$('#yourTooltip').tooltip({
sanitizeFn: function (content) {
return DOMPurify.sanitize(content)
}
})