gpt4 book ai didi

javascript - 如何打开一个下拉菜单关闭另一个?

转载 作者:行者123 更新时间:2023-11-30 05:51:09 27 4
gpt4 key购买 nike

我正在尝试学习纯原生 JavaScript,所以请不要建议使用框架来解决任务。我知道它们很棒,学习它们将是我完成纯 JS 后要做的第一件事 :)

现在,问题。 Fiddle

如您所见,我在那里有两个自定义下拉菜单。它们中的每一个都可以用鼠标和键盘打开和控制。解决此任务我需要做的最后一件事是实现以下功能:打开一个下拉菜单应该关闭另一个,在下拉菜单外单击应该关闭任何打开的下拉菜单(假设一次只能打开一个) .

我已经尝试向文档添加一个 onclick 监听器,如果其中任何一个打开但之前未使用过,它将关闭下拉菜单,但是在我单击一次文档后,下拉菜单不再显示。但这甚至不能解决一半的问题。因为我将标志 bIsOpen 分配给对象,所以我无法从另一个对象访问它们以查看它是否被触发。

请给我一个提示:)

最佳答案

将打开和关闭逻辑移动到它们自己的函数中:

DropDown.prototype.open = function (e) {
...
}

DropDown.prototype.close = function (e) {
...
}

this.htmlDropDown.onclick = function (e) {
if (this.bIsOpen) {
this.open(e);
} else {
this.close(e);
}
}

(确保打开和关闭函数调整 bIsOpen,而不是 onclick 处理程序。)

然后,添加所有当前存在的下拉列表的列表:

function DropDown(htmlObject) {
DropDown.dropdowns.push(this);
...
}

DropDown.dropdowns = []; // no 'prototype'

最后,在打开器中,关闭所有其他下拉菜单:

DropDown.prototype.open = function (e) {
var dropdown;
for (var i = 0; i < DropDown.dropdowns.length; i++) {
dropdown = DropDown.dropdowns[i];
if (dropdown !== this) {
dropdown.close();
}
}
...
}

关于javascript - 如何打开一个下拉菜单关闭另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com