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();
}
}
...
}