我正在尝试在手风琴内部创建一个手风琴...,我为此付出了一些努力。
基本上,我有一个div .applicant
,在单击时添加了一个类.expand
,该类将高度设置为auto,但是在.applicant
div内,我还有另一个div .applicant-child
,应该做同样的事情,并且应该做...但是,.applicant
将在您单击.applicant-child
时关闭,这意味着您必须再次单击.applicant
才能打开视图嵌套元素。
这是我的代码:
HTML
<div class="row">
<div class="col-sm-12">
<div class="applicant">
<p><b>PS4 Tournaments</b></p>
<div class="applicant-child">
<p>lalal</p>
<p>lalal</p>
</div>
</div>
</div>
</div>
jQuery
$('.applicant').click(function(){
if ($(this).hasClass('expand')) {
$(this).removeClass('expand');
} else {
$( this ).addClass('expand');
}
});
$('.applicant-child').click(function(){
if ($(this).hasClass('expand')) {
$(this).removeClass('expand');
} else {
$( this ).addClass('expand');
}
});
我可以简单地从$(this).removeClass('expand');
中删除.appliant
,但是我们将显示很多数据,所以这不是理想的选择。
我该如何解决?
预先感谢:)
答案 0 :(得分:1)
那只是冒泡预期行为的事件。
有关如何禁用click-Event
以使DOM冒泡并触发父元素上的事件的信息,请参见jQuery上的link。
基本上,您只需要这样做:
$('.applicant-child').click(function(event){
event.stopPropagation();
if ($(this).hasClass('expand')) {
$(this).removeClass('expand');
} else {
$( this ).addClass('expand');
}
});
答案 1 :(得分:0)
您要防止冒泡。冒泡意味着您正在响应的事件正在DOM上传递到父对象,直到到达窗口。
检出“ event.stopPropagation()”方法,该方法将防止任何后续的侦听器做出反应。
答案 2 :(得分:0)
在点击处理程序上,如果您通过了参数,则:
$('.applicant').click(function(event){
console.log(event.target);
if ($(this).hasClass('expand')) {
$(this).removeClass('expand');
} else {
$( this ).addClass('expand');
}
});
您可以使用event.target来检查您是单击父级还是子级,然后决定从那里采取什么操作。