我有一个脚本,当通过向父(.bob)添加类(.settings-active)来点击目标(#dave)时切换子菜单。
也可以通过点击目标外的任何地方及其子项来删除.settings-active类。
我遇到的问题是,当点击目标时会显示一个子菜单(.dd),但是当我尝试单击子菜单项(.one,.two)时,子菜单会因else语句触发而消失。 / p>
我的问题有两个:
提前谢谢
$('html').click(function(e) {
if (e.target.id == 'dave') {
$('.bob').toggleClass('settings-active');
} else {
$('.bob').removeClass('settings-active');
}
});
.settings-active {
color: red;
}
.dd {
display: none;
}
.settings-active .dd {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="bob">
<div id="dave">
Target
<div class="dd">
<div class="one">one</div>
<div class="two">two</div>
</div>
</div>
</div>
答案 0 :(得分:0)
您可以直接使用id
附加click
事件而不是html
:
$('.dave').click(function(e) {
$('.bob').toggleClass('settings-active');
});
您可以使用.stopPropagation()
来阻止子菜单消失:
$('.dave').click(function (e) {
$('.bob').toggleClass('settings-active');
});
$('.dd div').click(function (e) {
e.stopPropagation();
alert('clicked on: ' + $(this).html());
});
$('body').click(function (e) {
if (!$(e.target).hasClass("dave")) {
$('.bob').removeClass('settings-active');
}
});
阻止事件冒泡DOM树,防止任何父处理程序收到事件通知。