Javascript 如何使打开一个下拉列表关闭另一个下拉列表?

Javascript 如何使打开一个下拉列表关闭另一个下拉列表?,javascript,onclick,Javascript,Onclick,我试图学习纯本地的JavaScript,所以请不要建议使用框架来解决这个问题。我知道这些都是很棒的,学习它们将是我使用纯JS后要做的第一件事:) 现在,问题来了 如你所见,我有两个自定义下拉列表。每一个都可以用鼠标和键盘打开和控制。要解决此任务,我需要做的最后一件事是实现以下功能:打开一个下拉菜单应关闭另一个下拉菜单,在下拉菜单外单击应关闭任何打开的下拉菜单(假设一次只能打开一个) 我曾尝试在文档中添加一个onclick侦听器,如果其中任何一个打开但以前未使用过,则该侦听器将关闭下拉列表,但单击

我试图学习纯本地的
JavaScript
,所以请不要建议使用框架来解决这个问题。我知道这些都是很棒的,学习它们将是我使用纯JS后要做的第一件事:)

现在,问题来了

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

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


请给我一个提示:)

将打开和关闭逻辑移动到各自的功能中:

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

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

(确保打开和关闭功能调整的是
biopen
,而不是
onclick
处理程序。)

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

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

DropDown.dropdowns = []; // no 'prototype'
最后,在打开的er中,关闭所有其他下拉列表:

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();
        }
    }
    ...
}
DropDown.prototype.open=函数(e){
var下拉列表;
对于(变量i=0;i
您使用的是匈牙利符号吗?请不要这样,因为有人。您不需要使用
b
来限定
isOpen
,就可以知道它是一个布尔值,从复数“下拉对象”中可以明显看出,它是某种大小可变的容器。添加前缀无助于代码的清晰性;“如果有,那就没问题了。”瓦利德汗谢谢你的指导
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();
        }
    }
    ...
}