Skip to content

Commit ee71b36

Browse files
committed
fix: modal focus handling
Moves focus disabling/enabling logic to ensure proper handling of focusable elements within the modal. This prevents focus issues when the modal is initialized or closed, ensuring a better user experience.
1 parent 5bc10ad commit ee71b36

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/classes/Modal.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class Modal extends AbstractDomElement {
4242

4343
new ThrottledEvent(window, 'resize').add('resize', this._onResizeHandler)
4444
this._onResizeHandler()
45-
this.disableAllFocusedElements()
4645
}
4746

4847
/**
@@ -54,6 +53,7 @@ class Modal extends AbstractDomElement {
5453
*/
5554
init() {
5655
this.initialized = true
56+
this.disableAllFocusedElements()
5757
const el = this._element
5858
const { closeButtonSelector, closedClassName, descriptionSelector, labelSelector, triggerSelector } = this._settings
5959

@@ -113,6 +113,7 @@ class Modal extends AbstractDomElement {
113113
*/
114114
open() {
115115
this.isOpened = true
116+
this.enableAllFocusedElements()
116117

117118
const el = this._element
118119
const { closedClassName, openedClassName } = this._settings
@@ -137,8 +138,6 @@ class Modal extends AbstractDomElement {
137138
window.addEventListener('click', this._handleOutsideClick)
138139
})
139140
}
140-
141-
this.enableAllFocusedElements()
142141
}
143142

144143
/**
@@ -153,6 +152,7 @@ class Modal extends AbstractDomElement {
153152
const { closedClassName, openedClassName } = this._settings
154153

155154
this.isOpened = false
155+
this.disableAllFocusedElements()
156156

157157
el.classList.add(closedClassName)
158158
el.classList.remove(openedClassName)
@@ -170,8 +170,6 @@ class Modal extends AbstractDomElement {
170170
if (this._settings.closeOnFocusOutside) {
171171
window.removeEventListener('click', this._handleOutsideClick)
172172
}
173-
174-
this.disableAllFocusedElements()
175173
}
176174

177175
/**
@@ -184,6 +182,10 @@ class Modal extends AbstractDomElement {
184182
* @author Milan Ricoul
185183
*/
186184
checkNextFocusableElement(e) {
185+
if (!this.isOpened && this.initialized) {
186+
return
187+
}
188+
187189
const el = this._element
188190
const focusableElements = el.querySelectorAll(FOCUSABLE_ELEMENTS)
189191
const currentIndexOfActiveElement = Array.prototype.indexOf.call(focusableElements, document.activeElement)
@@ -220,6 +222,8 @@ class Modal extends AbstractDomElement {
220222
btn.removeEventListener('click', this.open)
221223
})
222224

225+
this.enableAllFocusedElements()
226+
223227
super.destroy()
224228
}
225229

@@ -229,7 +233,7 @@ class Modal extends AbstractDomElement {
229233
enableAllFocusedElements() {
230234
const el = this._element
231235

232-
for (const focusableElement of Array.from(el.querySelectorAll(FOCUSABLE_ELEMENTS))) {
236+
for (const focusableElement of Array.from(el.querySelectorAll('[tabindex="-1"]'))) {
233237
focusableElement.removeAttribute('tabindex')
234238
}
235239
}

0 commit comments

Comments
 (0)