【发布时间】:2014-07-18 14:30:34
【问题描述】:
我想通过单击外部来关闭搜索菜单(包含许多元素)。为此,我制作了一个(onclick)函数来打开/关闭它,并使用一个链接(有效)和一个(onclick)函数来检测它之外的 clics,然后关闭它。问题是,我的第一个函数可以自己工作,但是当我放第二个函数时,什么都不起作用。这就是我到目前为止所得到的:
document.getElementById('link').addEventListener('click', function(e) {
menuframe = document.getElementsByClassName('searchframe')[0];
e.preventDefault(); // On bloque l'action par défaut de cet événement
if (!menuframe.classList.contains('displayed')) {
menuframe.classList.add('displayed');
} else {
menuframe.classList.remove('displayed');
link.blur(); }
}, false);
document.getElementById('all').addEventListener('click', function (e) {
var x = document.getElementById.e.target.id,
menuframe = document.getElementsByClassName('searchframe')[0];
if (menuframe.classList.contains('displayed') && !menuframe.contains(x))
menuframe.classList.remove('displayed'); }
}, false);
我认为它与事件冒泡/捕获有关,试图弄乱 true/false 和 e.stopPropagation();没有成功。或者也许我的代码不好,我是 JS 的新手。我尝试搜索所有我能想到的东西,并尝试了我发现的各种“修复”,但没有成功。
总而言之,我如何在点击外部时真正关闭 div? (如果可能的话没有jQuery,我根本不知道语法)
编辑:按照 Jameel 的建议,在第 14 行的“if”之后添加了“{”,并将第 12 行更改为“var x = document.getElementById(e.target.id)”。现在 e.preventDefault 在第一个函数上工作,但还是这样。
【问题讨论】:
标签: javascript