Bootstrap 手风琴:如何使整个按钮可点击?
Bootstrap accordion: how to make entire button clickable?
我将手风琴菜单添加到我的网站,使用以下示例:
<div class="bs-example">
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">1. Menu number one</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in">
<div class="panel-body">
<p>Menu number one text</p>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">2. Menu number two</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="panel-body">
<p>Menu number two</p>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">3. Menu number three</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
<div class="panel-body">
<p>Menu number three</p>
</div>
</div>
</div>
</div>
</div>
你可以看到直播here
你知道如何让整个按钮可以点击吗?目前只要标题就可以了。
提前致谢
创建点击事件 .panel-heading
并在事件中检查 .panel-heading
第二个祖先是否为 <a class="" href="#colapseXXXXX" data-parent="#accordion" data-toggle="collapse"></a>
。例如检查 href 中的值。然后如果是真的触发器点击<a>
.
试试这个代码:
$('.panel-heading').on('click', function () {
var a = $(this).childen('.panel-title').children('a');
var ahref = a.prop('href');
if (ahref.indexOf('#collapse') > -1)
{
a.trigger("click");
}
});
工作解决方案:
$(document).ready(function(){
$('.panel-heading').on('click', function () {
var a = $(this).find('a');
var ahref = a.prop('href');
if (ahref.indexOf('#collapse') > -1)
{
$('.panel-collapse').removeClass('in');
$(this).next('div').addClass('in');
}
});
$(".panel-heading a").on('click', function(event) {
$(this).closest('.panel-heading').trigger('click');
return false;
});
});;
触发点击导致点击事件冒泡回到 .panel-heading 和 .panel-heading 再次触发点击造成无限循环。如果我尝试 preventDefault() 我也会阻止默认的 bootstrap 行为,所以点击没有改变任何东西。以上是我认为的唯一解决方案。
请注意,
您是否尝试将 a 拉到 h4 的外面 class?
所以而不是
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">1. Menu number one</a>
</h4>
</div>
尝试
<div class="panel-heading">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
<h4 class="panel-title">1. Menu number one</h4>
</a>
</div>
我知道这是一个旧线程,但我遇到了同样的问题并且更容易解决。
只需给你的“.panel-title a”显示块
如果父 div 有填充,请将其设置为 0 并将其设置为您的 .panel-title a
.panel-heading{
padding: 0;
}
.panel-title a{
display: block;
padding: 15px;
}
这里不需要.js
这是一个旧线程,但我今天使用 Bootstrap 4.
遇到了完全相同的问题
我遵循了hikups的解决方案,但没有必要使用自定义CSS。
只需在锚元素的 class 属性中添加 d-block。
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" class="d-block">1. Menu number one</a>
我将手风琴菜单添加到我的网站,使用以下示例:
<div class="bs-example">
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">1. Menu number one</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in">
<div class="panel-body">
<p>Menu number one text</p>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">2. Menu number two</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="panel-body">
<p>Menu number two</p>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">3. Menu number three</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
<div class="panel-body">
<p>Menu number three</p>
</div>
</div>
</div>
</div>
</div>
你可以看到直播here
你知道如何让整个按钮可以点击吗?目前只要标题就可以了。
提前致谢
创建点击事件 .panel-heading
并在事件中检查 .panel-heading
第二个祖先是否为 <a class="" href="#colapseXXXXX" data-parent="#accordion" data-toggle="collapse"></a>
。例如检查 href 中的值。然后如果是真的触发器点击<a>
.
试试这个代码:
$('.panel-heading').on('click', function () {
var a = $(this).childen('.panel-title').children('a');
var ahref = a.prop('href');
if (ahref.indexOf('#collapse') > -1)
{
a.trigger("click");
}
});
工作解决方案:
$(document).ready(function(){
$('.panel-heading').on('click', function () {
var a = $(this).find('a');
var ahref = a.prop('href');
if (ahref.indexOf('#collapse') > -1)
{
$('.panel-collapse').removeClass('in');
$(this).next('div').addClass('in');
}
});
$(".panel-heading a").on('click', function(event) {
$(this).closest('.panel-heading').trigger('click');
return false;
});
});;
触发点击导致点击事件冒泡回到 .panel-heading 和 .panel-heading 再次触发点击造成无限循环。如果我尝试 preventDefault() 我也会阻止默认的 bootstrap 行为,所以点击没有改变任何东西。以上是我认为的唯一解决方案。
请注意,
您是否尝试将 a 拉到 h4 的外面 class? 所以而不是
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">1. Menu number one</a>
</h4>
</div>
尝试
<div class="panel-heading">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
<h4 class="panel-title">1. Menu number one</h4>
</a>
</div>
我知道这是一个旧线程,但我遇到了同样的问题并且更容易解决。
只需给你的“.panel-title a”显示块
如果父 div 有填充,请将其设置为 0 并将其设置为您的 .panel-title a
.panel-heading{
padding: 0;
}
.panel-title a{
display: block;
padding: 15px;
}
这里不需要.js
这是一个旧线程,但我今天使用 Bootstrap 4.
遇到了完全相同的问题我遵循了hikups的解决方案,但没有必要使用自定义CSS。 只需在锚元素的 class 属性中添加 d-block。
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" class="d-block">1. Menu number one</a>