关闭元素点击外面-我在这里做错了什么
Closing element on click outside - What am I doing wrong here?
只是在做一个快速的测试,点击外部的jquery元素,但有一些问题。
我想删除一个类在点击一个元素之外。
问题似乎是'document'处理程序与span同时激活,因此不工作。
我需要它,所以它工作后,类已经添加。
欢呼<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>animation</title>
<link rel="stylesheet" href="css/normalize.css" media="screen" title="no title">
<link rel="stylesheet" href="css/main.css" media="screen" title="no title">
</head>
<body>
<ul>
<li class="top-list"><span>Item</span>
<ul class="sub-top">
<li class="sub-list">Item 1</li>
<li class="sub-list">Item 2</li>
<li class="sub-list">Item 3</li>
<li class="sub-list">Item 4</li>
</ul>
</li>
</ul>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script type="text/javascript">
$("span").on("click", function(){
$(".sub-list").toggleClass("show-menu");
});
$(document).on('click', function(event) {
if (!$(event.target).closest('.sub-list').length) {
$(".sub-list").removeClass("show-menu");
}
});
</script>
</body>
</html>
您错过了ev.stopPropagation()
的第一个处理程序。您单击span
切换类show-menu
,然后事件冒泡到文档中,因此您单击退出.sub-list
(span不在其中)第二个处理程序删除类
或者在第二个处理程序中,你需要检查你点击的是.sub-list
中的元素而不是span
元素
ul[class]:not(.show-menu) {
display: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>animation</title>
<link rel="stylesheet" href="css/normalize.css" media="screen" title="no title">
<link rel="stylesheet" href="css/main.css" media="screen" title="no title">
</head>
<body>
<ul>
<li class="top-list"><span>Item</span>
<ul class="sub-top">
<li class="sub-list">Item 1</li>
<li class="sub-list">Item 2</li>
<li class="sub-list">Item 3</li>
<li class="sub-list">Item 4</li>
</ul>
</li>
</ul>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script type="text/javascript">
$("span").on("click", function(ev){
$(".sub-top").toggleClass("show-menu");
ev.stopPropagation();
});
$(document).on('click', function(event) {
if (!$(event.target).closest('.sub-list').length) {
$(".sub-top").removeClass("show-menu");
}
});
</script>
</body>
</html>
关于冒泡的信息可以在这里找到http://javascript.info/tutorial/bubbling-and-capturing
我认为这是一个气泡问题,取消气泡与span元素。试试吧!
相关文章:
- 我在这里做错了什么?否则,如果
- Javascript和HTML - 添加一个下拉菜单,我在这里做错了什么
- 嵌套函数:我在这里创建了 10 个函数
- if 语句中的一部分 JavaScript 代码运行,而同一块中的其余代码不执行.我在这里错过了什么
- Javascript中的继承,我在这里做错了什么
- 在嵌套循环中创建事件处理程序的效率:我在这里创建了 1440 个函数
- 我在这里做错了什么?未捕获的引用错误:分配中的左侧无效
- 手风琴一样的形式,对我不起作用,谁能看到我在这里做错了什么.
- 嵌套的AngularJS指令.我在这里做错了什么
- 我在这里得到了Uncaught SyntaxError:意外的令牌<.为什么会这样
- JQuery UI在这里添加了什么
- myArray.push([“dog”,3]);应该把狗和3推到最后,但没有,我在这里错过了什么
- JavaScript对象:我在这里做错了什么?
- JavaScript作用域在这里发生了什么?
- 溢出:隐藏,我在这里做错了什么
- Javascript启用/禁用复选框,我在这里做错了什么
- 我不能让AngularJS工作,我在这里错过了什么
- jquery的change方法在这里做了什么?
- 使用JavaScript函数作为“类”:我在这里做错了什么?
- 数据按在视图不't似乎是工作,我在这里错过了什么