From dfa41f905b6ee4ae99b4fd1a36562bde356144ad Mon Sep 17 00:00:00 2001 From: Alexandre Jacob Date: Sat, 9 May 2020 19:34:51 +0200 Subject: [PATCH] Fix closable dialog focus When opening a closable dialog, the focus goes to the close button. ```html ``` This button should not be focused --- src/components/dialog/Dialog.vue | 6 +++--- src/components/utils/DomHandler.js | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/dialog/Dialog.vue b/src/components/dialog/Dialog.vue index 87cc45bf2..a978ad51d 100755 --- a/src/components/dialog/Dialog.vue +++ b/src/components/dialog/Dialog.vue @@ -122,9 +122,9 @@ export default { } }, focus() { - let focusable = DomHandler.findSingle(this.$refs.dialog, 'input,button'); - if (focusable) { - focusable.focus(); + let focusableElements = DomHandler.getFocusableElements(this.$refs.dialog); + if (focusableElements && focusableElements.length > 0) { + focusableElements[0].focus(); } }, maximize() { diff --git a/src/components/utils/DomHandler.js b/src/components/utils/DomHandler.js index 9e97c3e8f..7b14a5035 100755 --- a/src/components/utils/DomHandler.js +++ b/src/components/utils/DomHandler.js @@ -401,10 +401,10 @@ export default class DomHandler { } static getFocusableElements(element) { - let focusableElements = DomHandler.find(element, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), - [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), - input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), - textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), + let focusableElements = DomHandler.find(element, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), + [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]):not([aria-label = "close"]), + input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), + textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])` ); @@ -427,4 +427,4 @@ export default class DomHandler { this.hasClass(element.parentElement, 'p-checkbox') || this.hasClass(element.parentElement, 'p-radiobutton') ); } -} \ No newline at end of file +}