我正在使用Bootstrap手风琴,它是根据选择列表选项中的选择选项动态创建的,因此对于所选的每个选项,我都会在现有手风琴上附加一个手风琴组。
除了能够添加面板之外,我还希望能够删除面板。我确实考虑过关闭按钮,但我无法在关闭按钮(跨度)上定位点击事件。
以下是我创建手风琴时输出内容的示例
<div id="menu">
<div class="panel list-group">
<a href="#" class="list-group-item default" data-toggle="collapse" data-target="#sm" data-parent="#menu">MESSAGES <span class="label label-info">5</span> <span class="fa fa-close pull-right"></span></a>
<div id="sm" class="sublinks collapse">
<div class="list-group-item">
TEST1
</div>
<div class="list-group-item">
TEST2
</div>
<div class="list-group-item">
TEST3
</div>
</div>
</div>
</div>
我认为单击此元素<span class="fa fa-close pull-right">
会导致事件触发,但它永远不会触发。它只是打开/关闭面板作为默认行为。
我确实考虑过尝试使用Jquery来处理手风琴,但这似乎需要付出额外的努力。
我是否需要将我的关闭按钮放在其他地方,或者我错过了任何可以使其工作的东西?
答案 0 :(得分:0)
$(".fa-close").click(function(){
$(this).parent().parent().parent().remove();
})
答案 1 :(得分:0)
你应该使用所谓的event delegation
单击事件侦听器/处理程序附加到共同的祖先(在这种情况下为div#menu
)。
使用此技术,您通常必须在事件对象event.target
属性的帮助下测试原始单击元素,以了解是否应用任何操作。 jQuery通过使on()
函数在处理函数之前接受第二个参数(是与目标匹配的选择器)来简化此过程。然后,您只需实施实际操作:在这种情况下,关联的.panel
删除。
主要优点是动态添加.panels
(事件注册后)也会触发“删除”处理程序。内存中只保留一个功能。
您还必须将span.fa-close
置于锚之外并使用一点CSS来防止手风琴折叠行为干扰关闭动作。
示例:强>
$(function(){
// When a click happens in the menu and has been triggered
// by an element having the '.fa-close' applied to it.
$('#menu').on('click', '.fa-close', function(e){
// Remove the associated '.panel' element
$(this).closest('.panel').remove();
});
});
#menu .panel{position: relative}
#menu .fa-close{position: absolute; right:15px; top:15px; cursor:pointer;}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div id="menu">
<div class="panel list-group">
<a href="#" class="list-group-item default" data-toggle="collapse" data-target="#sm1" data-parent="#menu">
MESSAGES <span class="label label-info">5</span>
</a>
<div id="sm1" class="sublinks collapse">
<div class="list-group-item">
TEST1
</div>
<div class="list-group-item">
TEST2
</div>
<div class="list-group-item">
TEST3
</div>
</div>
<span class="fa fa-close pull-right" title="Remove this entry"></span>
</div>
<div class="panel list-group">
<a href="#" class="list-group-item default" data-toggle="collapse" data-target="#sm2" data-parent="#menu">
MESSAGES <span class="label label-info">3</span>
</a>
<div id="sm2" class="sublinks collapse">
<div class="list-group-item">
TEST4
</div>
<div class="list-group-item">
TEST5
</div>
<div class="list-group-item">
TEST6
</div>
</div>
<span class="fa fa-close pull-right"></span>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
否则,您必须在每个span
上附加一个点击事件处理程序,并且每次将新面板添加到DOM时都会这样做。