2014-07-12 11:20:15 +02:00
---
2015-08-15 07:45:55 +02:00
layout: docs
2014-07-12 11:20:15 +02:00
title: Popovers
2017-05-28 08:01:14 +02:00
description: Documentation and examples for adding Bootstrap popovers, like those found in iOS, to any element on your site.
2015-08-06 02:47:45 +02:00
group: components
2017-05-28 08:01:14 +02:00
toc: true
2014-07-12 11:20:15 +02:00
---
2015-04-17 01:56:40 +02:00
## Overview
Things to know when using the popover plugin:
2019-01-08 17:33:28 +01:00
- Popovers rely on the 3rd party library [Popper.js ](https://popper.js.org/ ) for positioning. You must include [popper.min.js ]({{< param "cdn.popper" >}} ) before bootstrap.js or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js in order for popovers to work!
2019-02-04 11:22:02 +01:00
- Popovers require the [tooltip plugin ]({{< docsref "/components/tooltips" >}} ) as a dependency.
2015-04-17 01:56:40 +02:00
- Popovers are opt-in for performance reasons, so **you must initialize them yourself** .
- Zero-length `title` and `content` values will never show a popover.
- Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
- Triggering popovers on hidden elements will not work.
- Popovers for `.disabled` or `disabled` elements must be triggered on a wrapper element.
2018-05-15 21:59:51 +02:00
- When triggered from anchors that wrap across multiple lines, popovers will be centered between the anchors' overall width. Use `.text-nowrap` on your `<a>` s to avoid this behavior.
2017-05-09 10:51:44 +02:00
- Popovers must be hidden before their corresponding elements have been removed from the DOM.
2017-11-30 10:54:27 +01:00
- Popovers can be triggered thanks to an element inside a shadow DOM.
2015-04-17 01:56:40 +02:00
2019-01-08 17:33:28 +01:00
{{< callout info > }}
{{< partial " callout-info-prefersreducedmotion . md " > }}
{{< / callout > }}
2018-11-03 19:23:26 +01:00
2017-10-19 04:45:37 +02:00
Keep reading to see how popovers work with some examples.
2015-08-09 06:37:48 +02:00
2015-04-17 01:56:40 +02:00
## Example: Enable popovers everywhere
One way to initialize all popovers on a page would be to select them by their `data-toggle` attribute:
2014-08-03 03:30:59 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight js > }}
2019-05-14 14:11:17 +02:00
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
2014-11-10 07:02:53 +01:00
})
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2014-03-17 03:03:53 +01:00
2015-04-17 01:56:40 +02:00
## Example: Using the `container` option
2015-08-10 05:28:46 +02:00
When you have some styles on a parent element that interfere with a popover, you'll want to specify a custom `container` so that the popover's HTML appears within that element instead.
2019-01-08 17:33:28 +01:00
{{< highlight js > }}
2019-05-14 14:11:17 +02:00
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
2015-04-17 01:56:40 +02:00
})
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-04-17 01:56:40 +02:00
2017-12-27 06:50:23 +01:00
## Example
2014-07-13 09:54:34 +02:00
2019-01-08 17:33:28 +01:00
{{< example > }}
2015-10-24 07:15:50 +02:00
< button type = "button" class = "btn btn-lg btn-danger" data-toggle = "popover" title = "Popover title" data-content = "And here's some amazing content. It's very engaging. Right?" > Click to toggle popover< / button >
2019-01-08 17:33:28 +01:00
{{< / example > }}
2014-07-13 09:54:34 +02:00
2015-04-17 01:56:40 +02:00
### Four directions
2014-07-13 09:54:34 +02:00
2017-12-27 06:50:23 +01:00
Four options are available: top, right, bottom, and left aligned.
2015-04-16 23:07:20 +02:00
< div class = "bd-example popover-demo" >
< div class = "bd-example-popovers" >
2014-07-13 09:54:34 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "top" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on top
< / button >
2015-06-19 08:56:43 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "right" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on right
< / button >
2014-07-13 09:54:34 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "bottom" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on bottom
< / button >
2015-06-19 08:56:43 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "left" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on left
2014-07-13 09:54:34 +02:00
< / button >
2014-03-17 03:03:53 +01:00
< / div >
2014-07-13 09:54:34 +02:00
< / div >
2014-03-17 03:03:53 +01:00
2019-01-08 17:33:28 +01:00
{{< highlight html > }}
2014-07-09 02:14:14 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "top" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
2014-03-17 03:03:53 +01:00
Popover on top
< / button >
2015-06-19 08:56:43 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "right" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on right
< / button >
2014-07-09 02:14:14 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "bottom" data-content = "Vivamus
2014-03-17 03:03:53 +01:00
sagittis lacus vel augue laoreet rutrum faucibus.">
Popover on bottom
< / button >
2015-06-19 08:56:43 +02:00
< button type = "button" class = "btn btn-secondary" data-container = "body" data-toggle = "popover" data-placement = "left" data-content = "Vivamus sagittis lacus vel augue laoreet rutrum faucibus." >
Popover on left
2014-03-17 03:03:53 +01:00
< / button >
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2014-03-17 03:03:53 +01:00
2015-04-17 01:56:40 +02:00
### Dismiss on next click
2014-07-13 09:54:34 +02:00
2017-10-18 23:22:26 +02:00
Use the `focus` trigger to dismiss popovers on the user's next click of a different element than the toggle element.
2014-07-13 09:54:34 +02:00
2019-01-08 17:33:28 +01:00
{{< callout danger > }}
2018-11-28 18:49:34 +01:00
#### Specific markup required for dismiss-on-next-click
2015-04-17 01:56:40 +02:00
2016-10-03 18:55:59 +02:00
For proper cross-browser and cross-platform behavior, you must use the `<a>` tag, _not_ the `<button>` tag, and you also must include a [`tabindex` ](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex ) attribute.
2019-01-08 17:33:28 +01:00
{{< / callout > }}
2014-08-03 03:30:59 +02:00
2019-01-08 17:33:28 +01:00
{{< example > }}
2015-10-24 07:15:50 +02:00
< a tabindex = "0" class = "btn btn-lg btn-danger" role = "button" data-toggle = "popover" data-trigger = "focus" title = "Dismissible popover" data-content = "And here's some amazing content. It's very engaging. Right?" > Dismissible popover< / a >
2019-01-08 17:33:28 +01:00
{{< / example > }}
2014-07-13 09:54:34 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight js > }}
2019-05-14 14:11:17 +02:00
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
2014-03-17 03:03:53 +01:00
trigger: 'focus'
})
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2014-03-17 03:03:53 +01:00
2017-12-28 02:07:58 +01:00
### Disabled elements
Elements with the `disabled` attribute aren't interactive, meaning users cannot hover or click them to trigger a popover (or tooltip). As a workaround, you'll want to trigger the popover from a wrapper `<div>` or `<span>` and override the `pointer-events` on the disabled element.
For disabled popover triggers, you may also prefer `data-trigger="hover"` so that the popover appears as immediate visual feedback to your users as they may not expect to _click_ on a disabled element.
2019-01-08 17:33:28 +01:00
{{< example > }}
2017-12-28 02:07:58 +01:00
< span class = "d-inline-block" data-toggle = "popover" data-content = "Disabled popover" >
< button class = "btn btn-primary" style = "pointer-events: none;" type = "button" disabled > Disabled button< / button >
< / span >
2019-01-08 17:33:28 +01:00
{{< / example > }}
2014-03-17 03:03:53 +01:00
2014-07-13 09:54:34 +02:00
## Usage
Enable popovers via JavaScript:
2019-05-14 14:11:17 +02:00
{{< highlight js > }}
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
{{< / highlight > }}
2014-07-13 09:54:34 +02:00
2019-06-04 09:36:57 +02:00
{{< callout warning > }}
### Making popovers work for keyboard and assistive technology users
To allow keyboard users to activate your popovers, you should only add them to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>` s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the popover's content in this situation. Additionally, do not rely solely on `hover` as the trigger for your popovers, as this will make them impossible to trigger for keyboard users.
While you can insert rich, structured HTML in popovers with the `html` option, we strongly recommend that you avoid adding an excessive amount of content. The way popovers currently work is that, once displayed, their content is tied to the trigger element with the `aria-describedby` attribute. As a result, the entirety of the popover's content will be announced to assistive technology users as one long, uninterrupted stream.
2020-06-19 10:31:37 +02:00
Additionally, while it is possible to also include interactive controls (such as form elements or links) in your popover (by adding these elements to the `allowList` of allowed attributes and tags), be aware that currently the popover does not manage keyboard focus order. When a keyboard user opens a popover, focus remains on the triggering element, and as the popover usually does not immediately follow the trigger in the document's structure, there is no guarantee that moving forward/pressing < kbd > TAB</ kbd > will move a keyboard user into the popover itself. In short, simply adding interactive controls to a popover is likely to make these controls unreachable/unusable for keyboard users and users of assistive technologies, or at the very least make for an illogical overall focus order. In these cases, consider using a modal dialog instead.
2019-06-04 09:36:57 +02:00
{{< / callout > }}
2014-07-13 09:54:34 +02:00
### Options
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-` , as in `data-animation=""` .
2019-01-08 17:33:28 +01:00
{{< callout warning > }}
2020-06-19 10:31:37 +02:00
Note that for security reasons the `sanitize` , `sanitizeFn` , and `allowList` options cannot be supplied using data attributes.
2019-01-08 17:33:28 +01:00
{{< / callout > }}
2019-02-11 15:59:39 +01:00
v5: Forms update (#28450)
* Initial spike of consolidated form checks
* Stub out forms rearrangement
- Prepping to drop non-custom file and range inputs
- Prepping to merge custom and native checks and radios (with switches)
- Prepping to merge custom select with form select
- Moving docs arround so forms has it's own area given volume of CSS
* Move input group Sass file to forms subdir
* Start to split and move the docs around
* Simpler imports
* Copyediting
* delete overview file
* Remove commented out code
* remove the custom-forms import
* rewrite flex-check as form-check, replace all custom properties
* Remove old forms doc
* stub out new subpage link section
* update migration guide
* Update nav, forms overview in page nav, and descriptions
* fix check bg position
* fix margin-top calculation
* rename .custom-select to .form-select
* Update validation styles for new checks
* add some vertical margin, fix inline checks
* fix docs examples
* better way to do this contents stuff, redo the toc while i'm at it
* page restyle for docs while here
* un-callout that, edit text
* redo padding on toc
* fix toc
* start to cleanup checks docs
* Rewrite Markdown tables into HTML
* Redesign tables, redo their docs
* Replace Open Iconic icons with custom Bootstrap icons
* Redesign the docs navbar, add a subheader, redo the sidebar
* Redesign docs homepage a bit
* Simplify table style overrides for docs tables
* Simplify docs typography for page titles and reading line length
* Stub out icons page
* Part of sidebar update, remove migration from nav.yml
* Move toc CSS to separate partial
* Change appearance of overview page
* fix sidebar arrow direction
* Add footer to docs layout
* Update descriptions
* Drop the .form-group class for margin utilities
* Remove lingering form-group-margin-bottom var
* improve footer spacing
* add headings to range page
* uncomment form range css
* Rename .custom-range to .form-range
* Drop unused docs var
* Uncomment the comment
* Remove unused variable
* Fix radio image sizing
* Reboot update: reset horizontal ul and ol padding
* de-dupe IDs
* tweak toc styles
* nvm, fix dropdown versions stuff
* remove sidebar nav toggle for now
* broken html
* fix more broken html, move css
* scss linting
* comment out broken helper docs
* scope styles
* scope styles
* Fixes #25540 and fixes #26407 for v5 only
* Update sidebar once more
* Match new sidenav order
* fix syntax error
* Rename custom-file to form-file, update paths, update migration docs for previous changes in #28696
* rename back
* fix size and alignment
* rename that back too
2019-07-12 23:52:33 +02:00
< table class = "table" >
2017-01-01 01:12:28 +01:00
< thead >
< tr >
< th style = "width: 100px;" > Name< / th >
< th style = "width: 100px;" > Type< / th >
< th style = "width: 50px;" > Default< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > animation< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > boolean< / td >
2020-06-27 13:28:21 +02:00
< td > < code > true< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > Apply a CSS fade transition to the popover< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > container< / code > < / td >
2017-10-03 20:23:42 +02:00
< td > string | element | false< / td >
2020-06-27 13:28:21 +02:00
< td > < code > false< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
< p > Appends the popover to a specific element. Example: < code > container: 'body'< / code > . This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize.< / p >
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > content< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > string | element | function< / td >
2020-06-27 13:28:21 +02:00
< td > < code > ''< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
< p > Default content value if < code > data-content< / code > attribute isn't present.< / p >
< p > If a function is given, it will be called with its < code > this< / code > reference set to the element that the popover is attached to.< / p >
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > delay< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > number | object< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 0< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
2017-04-28 00:57:10 +02:00
< p > Delay showing and hiding the popover (ms) - does not apply to manual trigger type< / p >
< p > If a number is supplied, delay is applied to both hide/show< / p >
< p > Object structure is: < code > delay: { "show": 500, "hide": 100 }< / code > < / p >
2017-01-01 01:12:28 +01:00
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > html< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > boolean< / td >
2020-06-27 13:28:21 +02:00
< td > < code > false< / code > < / td >
2019-02-19 15:19:02 +01:00
< td > Insert HTML into the popover. If false, < code > innerText< / code > property will be used to insert content into the DOM. Use text if you're worried about XSS attacks.< / td >
2017-01-01 01:12:28 +01:00
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > placement< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > string | function< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 'right'< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
2017-05-24 14:27:15 +02:00
< p > How to position the popover - auto | top | bottom | left | right.< br > When < code > auto< / code > is specified, it will dynamically reorient the popover.< / p >
2017-01-01 01:12:28 +01:00
< p > When a function is used to determine the placement, it is called with the popover DOM node as its first argument and the triggering element DOM node as its second. The < code > this< / code > context is set to the popover instance.< / p >
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > selector< / code > < / td >
2017-10-03 20:23:42 +02:00
< td > string | false< / td >
2020-06-27 13:28:21 +02:00
< td > < code > false< / code > < / td >
2019-01-08 17:33:28 +01:00
< td > If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to enable dynamic HTML content to have popovers added. See < a href = "{{< param repo >}}/issues/4215" > this< / a > and < a href = "https://codepen.io/Johann-S/pen/djJYPb" > an informative example< / a > .< / td >
2017-01-01 01:12:28 +01:00
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > template< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > string< / td >
2019-02-11 11:27:14 +01:00
< td > < code > '< div class="popover" role="tooltip"> < div class="popover-arrow"> < /div> < h3 class="popover-header"> < /h3> < div class="popover-body"> < /div> < /div> '< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
< p > Base HTML to use when creating the popover.< / p >
2017-06-15 07:03:33 +02:00
< p > The popover's < code > title< / code > will be injected into the < code > .popover-header< / code > .< / p >
< p > The popover's < code > content< / code > will be injected into the < code > .popover-body< / code > .< / p >
2019-02-11 11:27:14 +01:00
< p > < code > .popover-arrow< / code > will become the popover's arrow.< / p >
2017-01-01 01:12:28 +01:00
< p > The outermost wrapper element should have the < code > .popover< / code > class.< / p >
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > title< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > string | element | function< / td >
2020-06-27 13:28:21 +02:00
< td > < code > ''< / code > < / td >
2017-01-01 01:12:28 +01:00
< td >
< p > Default title value if < code > title< / code > attribute isn't present.< / p >
< p > If a function is given, it will be called with its < code > this< / code > reference set to the element that the popover is attached to.< / p >
< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > trigger< / code > < / td >
2017-01-01 01:12:28 +01:00
< td > string< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 'click'< / code > < / td >
2018-06-05 14:21:40 +02:00
< td > How popover is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space. < code > manual< / code > cannot be combined with any other trigger.< / td >
2017-01-01 01:12:28 +01:00
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > offset< / code > < / td >
2017-04-18 14:02:24 +02:00
< td > number | string< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 0< / code > < / td >
2020-03-24 20:42:54 +01:00
< td > Offset of the popover relative to its target. For more information refer to Popper.js's < a href = "https://popper.js.org/docs/v1/#modifiers..offset.offset" > offset docs< / a > .< / td >
2017-01-01 01:12:28 +01:00
< / tr >
2017-05-05 21:22:55 +02:00
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > fallbackPlacement< / code > < / td >
2017-05-05 21:22:55 +02:00
< td > string | array< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 'flip'< / code > < / td >
2017-05-05 21:22:55 +02:00
< td > Allow to specify which position Popper will use on fallback. For more information refer to
2020-03-24 20:42:54 +01:00
Popper.js's < a href = "https://popper.js.org/docs/v1/#modifiers..flip.behavior" > behavior docs< / a > < / td >
2017-05-05 21:22:55 +02:00
< / tr >
2017-12-12 10:36:54 +01:00
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > boundary< / code > < / td >
2017-12-12 10:36:54 +01:00
< td > string | element< / td >
2020-06-27 13:28:21 +02:00
< td > < code > 'scrollParent'< / code > < / td >
2020-03-24 20:42:54 +01:00
< td > Overflow constraint boundary of the popover. Accepts the values of < code > 'viewport'< / code > , < code > 'window'< / code > , < code > 'scrollParent'< / code > , or an HTMLElement reference (JavaScript only). For more information refer to Popper.js's < a href = "https://popper.js.org/docs/v1/#modifiers..preventOverflow.boundariesElement" > preventOverflow docs< / a > .< / td >
2017-12-12 10:36:54 +01:00
< / tr >
2019-02-11 15:59:39 +01:00
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > sanitize< / code > < / td >
2019-02-11 15:59:39 +01:00
< td > boolean< / td >
2020-06-27 13:28:21 +02:00
< td > < code > true< / code > < / td >
2019-02-11 15:59:39 +01:00
< td > Enable or disable the sanitization. If activated < code > 'template'< / code > , < code > 'content'< / code > and < code > 'title'< / code > options will be sanitized.< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > allowList< / code > < / td >
2019-02-11 15:59:39 +01:00
< td > object< / td >
2019-02-04 11:22:02 +01:00
< td > < a href = "{{< docsref " / getting-started / javascript # sanitizer " > }}">Default value< / a > < / td >
2019-02-11 15:59:39 +01:00
< td > Object which contains allowed attributes and tags< / td >
< / tr >
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > sanitizeFn< / code > < / td >
2019-02-11 15:59:39 +01:00
< td > null | function< / td >
2020-06-27 13:28:21 +02:00
< td > < code > null< / code > < / td >
2019-02-11 15:59:39 +01:00
< td > Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization.< / td >
< / tr >
2019-08-14 17:27:58 +02:00
< tr >
2020-06-27 13:28:21 +02:00
< td > < code > popperConfig< / code > < / td >
2019-08-14 17:27:58 +02:00
< td > null | object< / td >
2020-06-27 13:28:21 +02:00
< td > < code > null< / code > < / td >
2020-03-24 20:42:54 +01:00
< td > To change Bootstrap's default Popper.js config, see < a href = "https://popper.js.org/docs/v1/#Popper.Defaults" > Popper.js's configuration< / a > < / td >
2019-08-14 17:27:58 +02:00
< / tr >
2017-01-01 01:12:28 +01:00
< / tbody >
< / table >
2014-07-13 09:54:34 +02:00
2019-01-08 17:33:28 +01:00
{{< callout info > }}
2018-11-28 18:49:34 +01:00
#### Data attributes for individual popovers
2015-04-17 01:56:40 +02:00
Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.
2019-01-08 17:33:28 +01:00
{{< / callout > }}
2014-07-13 09:54:34 +02:00
### Methods
2019-01-08 17:33:28 +01:00
{{< callout danger > }}
{{< partial " callout-danger-async-methods . md " > }}
{{< / callout > }}
2017-03-28 23:43:16 +02:00
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
#### show
2014-07-13 09:54:34 +02:00
2019-07-29 10:23:44 +02:00
Reveals an element's popover. **Returns to the caller before the popover has actually been shown** (i.e. before the `shown.bs.popover` event occurs). This is considered a "manual" triggering of the popover. Popovers whose title and content are both zero-length are never displayed.
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.show(){{< / highlight > }}
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
#### hide
2014-07-13 09:54:34 +02:00
2015-01-19 23:48:12 +01:00
Hides an element's popover. **Returns to the caller before the popover has actually been hidden** (i.e. before the `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover.
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.hide(){{< / highlight > }}
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
#### toggle
2014-07-13 09:54:34 +02:00
2015-01-19 23:48:12 +01:00
Toggles an element's popover. **Returns to the caller before the popover has actually been shown or hidden** (i.e. before the `shown.bs.popover` or `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover.
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.toggle(){{< / highlight > }}
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
#### dispose
2014-07-13 09:54:34 +02:00
2015-10-24 07:15:50 +02:00
Hides and destroys an element's popover. Popovers that use delegation (which are created using [the `selector` option ](#options )) cannot be individually destroyed on descendant trigger elements.
2015-03-01 22:44:10 +01:00
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.dispose(){{< / highlight > }}
2017-03-24 11:32:39 +01:00
2019-05-14 14:11:17 +02:00
#### enable
2017-03-24 11:32:39 +01:00
Gives an element's popover the ability to be shown. **Popovers are enabled by default.**
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.enable(){{< / highlight > }}
2017-03-24 11:32:39 +01:00
2019-05-14 14:11:17 +02:00
#### disable
2017-03-24 11:32:39 +01:00
Removes the ability for an element's popover to be shown. The popover will only be able to be shown if it is re-enabled.
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.disable(){{< / highlight > }}
2017-03-24 11:32:39 +01:00
2019-05-14 14:11:17 +02:00
#### toggleEnabled
2017-03-24 11:32:39 +01:00
Toggles the ability for an element's popover to be shown or hidden.
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.toggleEnabled(){{< / highlight > }}
2014-07-13 09:54:34 +02:00
2019-05-14 14:11:17 +02:00
#### update
2017-04-19 15:08:06 +02:00
Updates the position of an element's popover.
2019-05-14 14:11:17 +02:00
{{< highlight js > }}myPopover.update(){{< / highlight > }}
2019-07-28 15:24:46 +02:00
#### getInstance
2019-05-14 14:11:17 +02:00
*Static* method which allows you to get the popover instance associated with a DOM element
{{< highlight js > }}
var exampleTriggerEl = document.getElementById('example')
2019-07-28 15:24:46 +02:00
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
2019-05-14 14:11:17 +02:00
{{< / highlight > }}
2017-04-19 15:08:06 +02:00
2014-07-13 09:54:34 +02:00
### Events
v5: Forms update (#28450)
* Initial spike of consolidated form checks
* Stub out forms rearrangement
- Prepping to drop non-custom file and range inputs
- Prepping to merge custom and native checks and radios (with switches)
- Prepping to merge custom select with form select
- Moving docs arround so forms has it's own area given volume of CSS
* Move input group Sass file to forms subdir
* Start to split and move the docs around
* Simpler imports
* Copyediting
* delete overview file
* Remove commented out code
* remove the custom-forms import
* rewrite flex-check as form-check, replace all custom properties
* Remove old forms doc
* stub out new subpage link section
* update migration guide
* Update nav, forms overview in page nav, and descriptions
* fix check bg position
* fix margin-top calculation
* rename .custom-select to .form-select
* Update validation styles for new checks
* add some vertical margin, fix inline checks
* fix docs examples
* better way to do this contents stuff, redo the toc while i'm at it
* page restyle for docs while here
* un-callout that, edit text
* redo padding on toc
* fix toc
* start to cleanup checks docs
* Rewrite Markdown tables into HTML
* Redesign tables, redo their docs
* Replace Open Iconic icons with custom Bootstrap icons
* Redesign the docs navbar, add a subheader, redo the sidebar
* Redesign docs homepage a bit
* Simplify table style overrides for docs tables
* Simplify docs typography for page titles and reading line length
* Stub out icons page
* Part of sidebar update, remove migration from nav.yml
* Move toc CSS to separate partial
* Change appearance of overview page
* fix sidebar arrow direction
* Add footer to docs layout
* Update descriptions
* Drop the .form-group class for margin utilities
* Remove lingering form-group-margin-bottom var
* improve footer spacing
* add headings to range page
* uncomment form range css
* Rename .custom-range to .form-range
* Drop unused docs var
* Uncomment the comment
* Remove unused variable
* Fix radio image sizing
* Reboot update: reset horizontal ul and ol padding
* de-dupe IDs
* tweak toc styles
* nvm, fix dropdown versions stuff
* remove sidebar nav toggle for now
* broken html
* fix more broken html, move css
* scss linting
* comment out broken helper docs
* scope styles
* scope styles
* Fixes #25540 and fixes #26407 for v5 only
* Update sidebar once more
* Match new sidenav order
* fix syntax error
* Rename custom-file to form-file, update paths, update migration docs for previous changes in #28696
* rename back
* fix size and alignment
* rename that back too
2019-07-12 23:52:33 +02:00
< table class = "table" >
2017-01-01 01:12:28 +01:00
< thead >
2017-04-28 00:57:10 +02:00
< tr >
v5: Forms update (#28450)
* Initial spike of consolidated form checks
* Stub out forms rearrangement
- Prepping to drop non-custom file and range inputs
- Prepping to merge custom and native checks and radios (with switches)
- Prepping to merge custom select with form select
- Moving docs arround so forms has it's own area given volume of CSS
* Move input group Sass file to forms subdir
* Start to split and move the docs around
* Simpler imports
* Copyediting
* delete overview file
* Remove commented out code
* remove the custom-forms import
* rewrite flex-check as form-check, replace all custom properties
* Remove old forms doc
* stub out new subpage link section
* update migration guide
* Update nav, forms overview in page nav, and descriptions
* fix check bg position
* fix margin-top calculation
* rename .custom-select to .form-select
* Update validation styles for new checks
* add some vertical margin, fix inline checks
* fix docs examples
* better way to do this contents stuff, redo the toc while i'm at it
* page restyle for docs while here
* un-callout that, edit text
* redo padding on toc
* fix toc
* start to cleanup checks docs
* Rewrite Markdown tables into HTML
* Redesign tables, redo their docs
* Replace Open Iconic icons with custom Bootstrap icons
* Redesign the docs navbar, add a subheader, redo the sidebar
* Redesign docs homepage a bit
* Simplify table style overrides for docs tables
* Simplify docs typography for page titles and reading line length
* Stub out icons page
* Part of sidebar update, remove migration from nav.yml
* Move toc CSS to separate partial
* Change appearance of overview page
* fix sidebar arrow direction
* Add footer to docs layout
* Update descriptions
* Drop the .form-group class for margin utilities
* Remove lingering form-group-margin-bottom var
* improve footer spacing
* add headings to range page
* uncomment form range css
* Rename .custom-range to .form-range
* Drop unused docs var
* Uncomment the comment
* Remove unused variable
* Fix radio image sizing
* Reboot update: reset horizontal ul and ol padding
* de-dupe IDs
* tweak toc styles
* nvm, fix dropdown versions stuff
* remove sidebar nav toggle for now
* broken html
* fix more broken html, move css
* scss linting
* comment out broken helper docs
* scope styles
* scope styles
* Fixes #25540 and fixes #26407 for v5 only
* Update sidebar once more
* Match new sidenav order
* fix syntax error
* Rename custom-file to form-file, update paths, update migration docs for previous changes in #28696
* rename back
* fix size and alignment
* rename that back too
2019-07-12 23:52:33 +02:00
< th style = "width: 150px;" > Event type< / th >
2017-01-01 01:12:28 +01:00
< th > Description< / th >
2017-04-28 00:57:10 +02:00
< / tr >
2017-01-01 01:12:28 +01:00
< / thead >
< tbody >
< tr >
< td > show.bs.popover< / td >
< td > This event fires immediately when the < code > show< / code > instance method is called.< / td >
< / tr >
< tr >
< td > shown.bs.popover< / td >
< td > This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete).< / td >
< / tr >
< tr >
< td > hide.bs.popover< / td >
< td > This event is fired immediately when the < code > hide< / code > instance method has been called.< / td >
< / tr >
< tr >
< td > hidden.bs.popover< / td >
< td > This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete).< / td >
< / tr >
2017-04-07 14:23:26 +02:00
< tr >
< td > inserted.bs.popover< / td >
2017-08-14 23:04:06 +02:00
< td > This event is fired after the < code > show.bs.popover< / code > event when the popover template has been added to the DOM.< / td >
2017-04-07 14:23:26 +02:00
< / tr >
2017-01-01 01:12:28 +01:00
< / tbody >
< / table >
2014-03-17 03:03:53 +01:00
2019-01-08 17:33:28 +01:00
{{< highlight js > }}
2019-05-14 14:11:17 +02:00
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
2019-02-10 21:25:51 +01:00
// do something...
2014-03-17 03:03:53 +01:00
})
2019-01-08 17:33:28 +01:00
{{< / highlight > }}