aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick H. Lauke <[email protected]>2017-04-12 18:50:31 +0100
committerGitHub <[email protected]>2017-04-12 18:50:31 +0100
commit1f80f61677da40944f5af043722aedeebd3b71c3 (patch)
treeac4051a21634e21f77b308a36436d36a1af20069
parent29460b2005cde9ff807dc2c846fb95f150ffa872 (diff)
parent3275ca4b30383390d3475beb8c4f43343ab31f5c (diff)
downloadbootstrap-1f80f61677da40944f5af043722aedeebd3b71c3.tar.xz
bootstrap-1f80f61677da40944f5af043722aedeebd3b71c3.zip
Reword "mobile" to "touch-enabled"
...as touch is not exclusive to "mobile" anymore nowadays. also explicitly clarifies this is a fix for iOS, and that it impacts touch laptops etc as well. lastly, renames the variable from "dropdown" to "backdrop" for clarity/consistency
-rw-r--r--docs/components/dropdowns.md2
-rw-r--r--js/src/dropdown.js11
2 files changed, 7 insertions, 6 deletions
diff --git a/docs/components/dropdowns.md b/docs/components/dropdowns.md
index 3c68f9453..bb54c040e 100644
--- a/docs/components/dropdowns.md
+++ b/docs/components/dropdowns.md
@@ -480,7 +480,7 @@ Add `.disabled` to items in the dropdown to **style them as disabled**.
Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent list item.
-On mobile devices, opening a dropdown adds a `.dropdown-backdrop` as a tap area for closing dropdown menus when tapping outside the menu, a requirement for proper iOS support. **This means that switching from an open dropdown menu to a different dropdown menu requires an extra tap on mobile.**
+On touch-enabled devices, opening a dropdown adds a `.dropdown-backdrop` as a tap area for closing dropdown menus when tapping outside the menu, to work around a quirk in iOS' event delegation. **This means that once a dropdown menu is open, any tap or click (including with a mouse, on a multi-input device such as a laptop with a touchscreen) outside of the menu will be intercepted to close the menu. Opening another dropdown menu, or activating any other control or link, will therefore require an extra tap or click.**
Note: The `data-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it.
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 644273a0a..96b7c8773 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -112,11 +112,12 @@ const Dropdown = (($) => {
if ('ontouchstart' in document.documentElement &&
!$(parent).closest(Selector.NAVBAR_NAV).length) {
- // if mobile we use a backdrop because click events don't delegate
- const dropdown = document.createElement('div')
- dropdown.className = ClassName.BACKDROP
- $(dropdown).insertBefore(this)
- $(dropdown).on('click', Dropdown._clearMenus)
+ // if touch-enabled device we use a backdrop because click events
+ // don't delegate on iOS - see https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+ const backdrop = document.createElement('div')
+ backdrop.className = ClassName.BACKDROP
+ $(backdrop).insertBefore(this)
+ $(backdrop).on('click', Dropdown._clearMenus)
}
this.focus()