Ruka hadi kwa yaliyomo kuu Ruka hadi kwenye urambazaji wa hati
Check
in English

JavaScript

Sahihisha Bootstrap na programu-jalizi zetu za hiari za JavaScript. Jifunze kuhusu kila programu-jalizi, data na chaguo zetu za API za kiprogramu, na zaidi.

Ya mtu binafsi au iliyokusanywa

Programu-jalizi zinaweza kujumuishwa kibinafsi (kwa kutumia Bootstrap ya mtu binafsi js/dist/*.js), au zote kwa wakati mmoja kwa kutumia bootstrap.jsau minified bootstrap.min.js(usijumuishe zote mbili).

Ukitumia kifurushi (Webpack, Parcel, Vite…), unaweza kutumia /js/dist/*.jsfaili ambazo UMD tayari.

Matumizi na mifumo ya JavaScript

Ingawa Bootstrap CSS inaweza kutumika na mfumo wowote, JavaScript ya Bootstrap haioani kikamilifu na mifumo ya JavaScript kama React, Vue, na Angular ambayo inachukua ujuzi kamili wa DOM. Bootstrap na mfumo unaweza kujaribu kubadilisha kipengele sawa cha DOM, na kusababisha hitilafu kama menyu kunjuzi ambazo zimekwama katika nafasi ya "wazi".

Mbadala bora kwa wale wanaotumia aina hii ya mifumo ni kutumia kifurushi maalum cha mfumo badala ya JavaScript ya Bootstrap. Hapa kuna baadhi ya chaguzi maarufu zaidi:

Kutumia Bootstrap kama moduli

Jaribu mwenyewe! Pakua msimbo wa chanzo na onyesho la kufanya kazi kwa kutumia Bootstrap kama moduli ya ES kutoka hazina ya twbs/mifano . Unaweza pia kufungua mfano katika StackBlitz .

Tunatoa toleo la Bootstrap iliyojengwa kama ESM( bootstrap.esm.jsna bootstrap.esm.min.js) ambayo inakuruhusu kutumia Bootstrap kama sehemu katika kivinjari, ikiwa vivinjari unavyolengwa vinaiunga mkono .

<script type="module">
  import { Toast } from 'bootstrap.esm.min.js'

  Array.from(document.querySelectorAll('.toast'))
    .forEach(toastNode => new Toast(toastNode))
</script>

Ikilinganishwa na vifurushi vya JS, kutumia ESM kwenye kivinjari kunahitaji utumie njia kamili na jina la faili badala ya jina la moduli. Soma zaidi kuhusu moduli za JS kwenye kivinjari. Ndio maana tunatumia 'bootstrap.esm.min.js'badala ya 'bootstrap'hapo juu. Walakini, hii inachanganyikiwa zaidi na utegemezi wetu wa Popper, ambao huingiza Popper kwenye JavaScript yetu kama hivyo:

import * as Popper from "@popperjs/core"

Ukijaribu hii kama ilivyo, utaona hitilafu kwenye koni kama ifuatayo:

Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".

Ili kurekebisha hili, unaweza kutumia importmapkutatua majina ya moduli kiholela ili kukamilisha njia. Ikiwa vivinjari vyako vilivyolengwa havitumii , importmaputahitaji kutumia mradi wa es-module-shims . Hivi ndivyo inavyofanya kazi kwa Bootstrap na Popper:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
    <title>Hello, modularity!</title>
  </head>
  <body>
    <h1>Hello, modularity!</h1>
    <button id="popoverButton" type="button" class="btn btn-primary btn-lg" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ESM in Browser" data-bs-content="Bang!">Custom popover</button>

    <script async src="https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.min.js" crossorigin="anonymous"></script>
    <script type="importmap">
    {
      "imports": {
        "@popperjs/core": "https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js",
        "bootstrap": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.esm.min.js"
      }
    }
    </script>
    <script type="module">
      import * as bootstrap from 'bootstrap'

      new bootstrap.Popover(document.getElementById('popoverButton'))
    </script>
  </body>
</html>

Vitegemezi

Baadhi ya programu-jalizi na vipengele vya CSS hutegemea programu-jalizi zingine. Ikiwa utajumuisha programu-jalizi kibinafsi, hakikisha kuwa umeangalia tegemezi hizi kwenye hati.

Kunjuzi zetu, popover, na vidokezo vyetu pia hutegemea Popper .

Sifa za data

Takriban programu-jalizi zote za Bootstrap zinaweza kuwashwa na kusanidiwa kupitia HTML pekee na sifa za data (njia tunayopendelea ya kutumia utendaji wa JavaScript). Hakikisha kuwa unatumia seti moja tu ya sifa za data kwenye kipengele kimoja (kwa mfano, huwezi kuanzisha kidokezo na modali kutoka kwa kitufe kimoja.)

Kwa vile chaguo zinaweza kupitishwa kupitia sifa za data au JavaScript, unaweza kuongeza jina la chaguo kwa data-bs-, kama katika data-bs-animation="{value}". Hakikisha umebadilisha aina ya kipochi cha jina la chaguo kutoka " camelCase " hadi " kebab-case " wakati wa kupitisha chaguo kupitia sifa za data. Kwa mfano, tumia data-bs-custom-class="beautifier"badala ya data-bs-customClass="beautifier".

Kufikia Bootstrap 5.2.0, vipengee vyote vinaauni sifa ya data iliyohifadhiwa ya majaribiodata-bs-config ambayo inaweza kuweka usanidi wa sehemu rahisi kama mfuatano wa JSON. Wakati kipengele kina data-bs-config='{"delay":0, "title":123}'na data-bs-title="456"sifa, titlethamani ya mwisho itakuwa 456na sifa tofauti za data zitabatilisha thamani zilizotolewa kwenye data-bs-config. Kwa kuongezea, sifa zilizopo za data zinaweza kuweka maadili ya JSON kama data-bs-delay='{"show":0,"hide":150}'.

Wateuzi

Tunatumia asili querySelectorna querySelectorAllmbinu kuuliza vipengele vya DOM kwa sababu za utendaji, kwa hivyo ni lazima utumie viteuzi halali . Ikiwa unatumia viteuzi maalum kama vile collapse:Example, hakikisha umeviepuka.

Matukio

Bootstrap hutoa matukio maalum kwa vitendo vingi vya kipekee vya programu-jalizi. Kwa ujumla, hizi huja katika umbo lisilo na kikomo na la wakati uliopita - ambapo hali isiyo na kikomo (mf. show) huanzishwa mwanzoni mwa tukio, na umbo lake la zamani la kishirikishi (mf. shown) huanzishwa wakati kitendo kinapokamilika.

Matukio yote yasiyo na mwisho hutoa preventDefault()utendaji. Hii hutoa uwezo wa kusimamisha utekelezaji wa kitendo kabla ya kuanza. Kurejesha uwongo kutoka kwa kidhibiti tukio pia kutapiga simu kiotomatiki preventDefault().

const myModal = document.querySelector('#myModal')

myModal.addEventListener('show.bs.modal', event => {
  if (!data) {
    return event.preventDefault() // stops modal from being shown
  }
})

Programu ya API

Wajenzi wote wanakubali chaguo la chaguo la kitu au chochote (ambacho huanzisha programu-jalizi na tabia yake chaguomsingi):

const myModalEl = document.querySelector('#myModal')

const modal = new bootstrap.Modal(myModalEl) // initialized with defaults

const configObject = { keyboard: false }
const modal1 = new bootstrap.Modal(myModalEl, configObject) // initialized with no keyboard

Ikiwa ungependa kupata mfano fulani wa programu-jalizi, kila programu-jalizi inafichua getInstancembinu. Kwa mfano, kupata mfano moja kwa moja kutoka kwa kipengee:

bootstrap.Popover.getInstance(myPopoverEl)

Njia hii itarudi nullikiwa mfano haujaanzishwa juu ya kipengele kilichoombwa.

Vinginevyo, getOrCreateInstanceinaweza kutumika kupata mfano unaohusishwa na kipengele cha DOM, au kuunda kipya ikiwa hakijaanzishwa.

bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)

Ikiwa mfano haukuanzishwa, inaweza kukubali na kutumia kitu cha hiari cha usanidi kama hoja ya pili.

Viteuzi vya CSS katika wajenzi

Kando na getInstancena getOrCreateInstancembinu, waundaji programu-jalizi wote wanaweza kukubali kipengele cha DOM au kiteuzi halali cha CSS kama hoja ya kwanza. Vipengele vya programu-jalizi hupatikana kwa querySelectormbinu kwani programu-jalizi zetu zinaauni kipengele kimoja pekee.

const modal = new bootstrap.Modal('#myModal')
const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
const offcanvas = bootstrap.Offcanvas.getInstance('#myOffcanvas')
const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')

Kazi na mabadiliko ya Asynchronous

Mbinu zote za API za kiprogramu hazifanani na hurudi kwa anayepiga mara mpito unapoanza, lakini kabla haujaisha . Ili kutekeleza kitendo mara tu mpito utakapokamilika, unaweza kusikiliza tukio linalolingana.

const myCollapseEl = document.querySelector('#myCollapse')

myCollapseEl.addEventListener('shown.bs.collapse', event => {
  // Action to execute once the collapsible area is expanded
})

Kwa kuongeza, simu ya mbinu kwenye sehemu ya mpito itapuuzwa .

const myCarouselEl = document.querySelector('#myCarousel')
const carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance

myCarouselEl.addEventListener('slid.bs.carousel', event => {
  carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})

carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!

disposenjia

Ingawa inaweza kuonekana kuwa sawa kutumia disposenjia mara baada hide()ya , itasababisha matokeo yasiyo sahihi. Hapa kuna mfano wa matumizi ya shida:

const myModal = document.querySelector('#myModal')
myModal.hide() // it is asynchronous

myModal.addEventListener('shown.bs.hidden', event => {
  myModal.dispose()
})

Mipangilio chaguomsingi

Unaweza kubadilisha mipangilio chaguomsingi ya programu-jalizi kwa kurekebisha kipengee cha programu-jalizi Constructor.Default:

// changes default for the modal plugin's `keyboard` option to false
bootstrap.Modal.Default.keyboard = false

Mbinu na mali

Kila programu-jalizi ya Bootstrap inafichua njia zifuatazo na mali tuli.

Njia Maelezo
dispose Huharibu modi ya kipengele. (Huondoa data iliyohifadhiwa kwenye kipengele cha DOM)
getInstance Njia tuli ambayo hukuruhusu kupata mfano wa modal unaohusishwa na kipengee cha DOM.
getOrCreateInstance Njia tuli ambayo hukuruhusu kupata mfano wa modal unaohusishwa na kipengee cha DOM, au kuunda mpya ikiwa haikuanzishwa.
Mali tuli Maelezo
NAME Hurejesha jina la programu-jalizi. (Mfano bootstrap.Tooltip.NAME:)
VERSION Toleo la kila programu-jalizi za Bootstrap linaweza kufikiwa kupitia VERSIONmali ya mjenzi wa programu-jalizi (Mfano bootstrap.Tooltip.VERSION:)

Sanitizer

Vidokezo vya zana na Popovers hutumia sanitizer yetu iliyojumuishwa ili kusafisha chaguzi zinazokubali HTML.

Thamani chaguo-msingi allowListni ifuatayo:

const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
const DefaultAllowlist = {
  // Global attributes allowed on any supplied element below.
  '*': ['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: []
}

Ikiwa unataka kuongeza maadili mapya kwa chaguo-msingi hili allowListunaweza kufanya yafuatayo:

const myDefaultAllowList = bootstrap.Tooltip.Default.allowList

// To allow table elements
myDefaultAllowList.table = []

// To allow td elements and data-bs-option attributes on td elements
myDefaultAllowList.td = ['data-bs-option']

// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
const myCustomRegex = /^data-my-app-[\w-]+/
myDefaultAllowList['*'].push(myCustomRegex)

Ikiwa ungependa kukwepa kisafishaji chetu kwa sababu unapendelea kutumia maktaba maalum, kwa mfano DOMpurify , unapaswa kufanya yafuatayo:

const yourTooltipEl = document.querySelector('#yourTooltip')
const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
  sanitizeFn(content) {
    return DOMPurify.sanitize(content)
  }
})

Kwa hiari kutumia jQuery

Hauitaji jQuery ndani Bootstrap 5 , lakini bado inawezekana kutumia vifaa vyetu na jQuery. Ikiwa Bootstrap itagundua jQuerykwenye windowkitu, itaongeza vipengee vyetu vyote kwenye mfumo wa jalizi wa jQuery. Hii hukuruhusu kufanya yafuatayo:

$('[data-bs-toggle="tooltip"]').tooltip() // to enable tooltips, with default configuration

$('[data-bs-toggle="tooltip"]').tooltip({ boundary: 'clippingParents', customClass: 'myClass' }) // to initialize tooltips with given configuration

$('#myTooltip').tooltip('show') // to trigger `show` method

Vile vile huenda kwa vipengele vyetu vingine.

Hakuna mgongano

Wakati mwingine ni muhimu kutumia programu-jalizi za Bootstrap na mifumo mingine ya UI. Katika hali hizi, migongano ya nafasi ya majina inaweza kutokea mara kwa mara. Hili likitokea, unaweza kupiga simu .noConflictkwenye programu-jalizi unayotaka kurejesha thamani yake.

const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality

Bootstrap haitumii rasmi maktaba za JavaScript za wahusika wengine kama Prototype au jQuery UI. Licha .noConflictya matukio na yaliyowekwa katika nafasi ya majina, kunaweza kuwa na matatizo ya uoanifu ambayo unahitaji kurekebisha peke yako.

matukio ya jQuery

Bootstrap itagundua jQuery ikiwa jQueryiko kwenye windowkitu na hakuna data-bs-no-jquerysifa iliyowekwa kwenye <body>. Ikiwa jQuery itapatikana, Bootstrap itatoa matukio kutokana na mfumo wa tukio wa jQuery. Kwa hivyo ikiwa unataka kusikiliza matukio ya Bootstrap, itabidi utumie njia za jQuery ( .on, .one) badala ya addEventListener.

$('#myTab a').on('shown.bs.tab', () => {
  // do something...
})

JavaScript imezimwa

Programu-jalizi za Bootstrap hazina urejesho maalum wakati JavaScript imezimwa. Iwapo unajali kuhusu matumizi ya mtumiaji katika kesi hii, tumia <noscript>kueleza hali (na jinsi ya kuwezesha tena JavaScript) kwa watumiaji wako, na/au ongeza vikwazo vyako maalum.