How to close Dropdown when user click on one item? #1870
-
|
hey Guys! |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 5 replies
-
|
If Using Method 1 from the docs (
|
Beta Was this translation helpful? Give feedback.
-
|
In svelte you can do it like this <script lang="ts">
let openDropdown: boolean = false
function handleClickItem() {
// close it
openDropdown = false
}
</script>
<details class="dropdown" bind:open="{openDropdown}">
<summary class="m-1 btn">open or close</summary>
<ul class="p-2 shadow menu dropdown-content z-[1] bg-base-100 rounded-box w-52">
<li>
<a on:click={handleClickItem}>Item 1</a>
</li>
<li>
<a on:click={handleClickItem}>Item 2</a>
</li>
</ul>
</details> |
Beta Was this translation helpful? Give feedback.
-
|
i use react ts import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { HiOutlineLanguage } from "react-icons/hi2";
import { LANGUAGES } from "../../common/constants";
export default function LanguageDropdown() {
const { i18n } = useTranslation("global");
const [isOpen, setIsOpen] = useState(false);
useEffect(() => {
document.documentElement.lang = i18n.language;
}, [i18n.language]);
function changeLanguage(lang: string) {
i18n.changeLanguage(lang);
document.documentElement.lang = lang;
// document.querySelector("#langSelector")? = false;
setIsOpen(false);
}
const handleChangeLanguage = (
e: React.MouseEvent<HTMLAnchorElement, MouseEvent>
) => {
changeLanguage(e.currentTarget.dataset.value!);
e.currentTarget.blur();
};
return (
<div className="p-1 dropdown dropdown-bottom dropdown-end">
<details id="langSelector" open={isOpen}>
<summary className="btn btn-ghost btn-sm rounded-btn">
<HiOutlineLanguage className="h-6 w-6" />
</summary>
<ul className="menu dropdown-content z-[1] bg-base-100 rounded-box w-52 p-2 shadow">
{LANGUAGES.map((lang) => (
<li key={lang.code}>
<a data-value={lang.code} onClick={handleChangeLanguage}>
{lang.label}
</a>
</li>
))}
</ul>
</details>
</div>
);
}i have used is this because of this issue? #3382 |
Beta Was this translation helpful? Give feedback.
-
Using method 3 (CSS Focus):Based on this article, you could remove the focus calling export const MyDropdown = () => {
const handleClick = () => {
const element = document.activeElement;
if (element && element instanceof HTMLElement) element.blur();
};
return (
<div className="dropdown">
<div tabIndex={0} role="button" className="btn m-1">Click</div>
<ul tabIndex={0} className="dropdown-content menu bg-base-100 rounded-box z-1 w-52 p-2 shadow-sm">
<li onClick={handleClick}><a>Item 1</a></li>
<li onClick={handleClick}><a>Item 2</a></li>
</ul>
</div>
)
} |
Beta Was this translation helpful? Give feedback.
If Using Method 1 from the docs (
<details>tag):