From 889d66b4a0ac543e96e78e9915b5944d5c5c01e8 Mon Sep 17 00:00:00 2001 From: FlipWarthog Date: Sat, 7 Oct 2023 13:44:12 -0400 Subject: [PATCH] Fix #4567: DropDown: Labels unassociated from DropDown unless :editable="true" --- components/lib/dropdown/Dropdown.vue | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/components/lib/dropdown/Dropdown.vue b/components/lib/dropdown/Dropdown.vue index 8ddebed14b6..603da5876e9 100755 --- a/components/lib/dropdown/Dropdown.vue +++ b/components/lib/dropdown/Dropdown.vue @@ -187,6 +187,7 @@ export default { outsideClickListener: null, scrollHandler: null, resizeListener: null, + labelClickListener: null, overlay: null, list: null, virtualScroller: null, @@ -218,6 +219,7 @@ export default { this.id = this.id || UniqueComponentId(); this.autoUpdateModel(); + this.bindLabelClickListener(); }, updated() { if (this.overlayVisible && this.isModelValueChanged) { @@ -229,6 +231,7 @@ export default { beforeUnmount() { this.unbindOutsideClickListener(); this.unbindResizeListener(); + this.unbindLabelClickListener(); if (this.scrollHandler) { this.scrollHandler.destroy(); @@ -704,6 +707,29 @@ export default { this.resizeListener = null; } }, + bindLabelClickListener() { + if (!this.editable && !this.labelClickListener) { + const label = document.querySelector(`label[for="${this.inputId}"]`); + + if (label && DomHandler.isVisible(label)) { + + this.labelClickListener = () => { + DomHandler.focus(this.$refs.focusInput); + } + + label.addEventListener("click", this.labelClickListener); + } + } + }, + unbindLabelClickListener() { + if (this.labelClickListener) { + const label = document.querySelector(`label[for="${this.inputId}"]`); + + if (label && DomHandler.isVisible(label)) { + label.removeEventListener('click', this.labelClickListener); + } + } + }, hasFocusableElements() { return DomHandler.getFocusableElements(this.overlay, ':not([data-p-hidden-focusable="true"])').length > 0; },