我尝试使用Bootstrap的折叠功能来根据选中的单选按钮显示/隐藏div。当我不使用Bootstrap的折叠功能时,我可以让事情正常工作,但是,为了给予人一种更一致的感觉,我想利用这个功能。
下面是所讨论的HTML的一个片段:
<div class="col-xs-12 form-group">
<label class="radio-inline">
<input type="radio" id="send-now-radio" name="when" value="send-now" checked> <strong>Send Now</strong>
</label>
<label class="radio-inline">
<input type="radio" id="pickup-radio" name="when" value="pickup"> <strong>Hold for pickup</strong>
</label>
<label class="radio-inline">
<input type="radio" id="fax-radio" name="when" value="fax"> <strong>Fax</strong>
</label>
<label class="radio-inline">
<input type="radio" id="email-radio" name="when" value="email"> <strong>Email</strong>
</label>
</div>
<div class="col-xs-12">
<div id="send">Send</div>
<div id="pickup">Pickup</div>
<div id="fax">Fax</div>
<div id="email">Email</div>
</div>
下面是我的javascript代码:
$(document).ready(function()
{
// Hide all but one method div (since all are shown in case the user has JS disabled)
$('#send').show();
$('#pickup').hide();
$('#fax').hide();
$('#email').hide();
// Attach to the radio buttons when they change
$('#send-now-radio, #pickup-radio, #fax-radio, #email-radio').on('change', function () {
// Make sure that this change is because a radio button has been checked
if (!this.checked) return
// Check which radio button has changed
if (this.id == 'send-now-radio') {
$('#send').collapse('show');
$('#pickup').collapse('hide');
$('#fax').collapse('hide');
$('#email').collapse('hide');
} else if (this.id == 'pickup-radio') {
$('#send').collapse('hide');
$('#pickup').collapse('show');
$('#fax').collapse('hide');
$('#email').collapse('hide');
} else if (this.id == 'fax-radio') {
$('#send').collapse('hide');
$('#pickup').collapse('hide');
$('#fax').collapse('show');
$('#email').collapse('hide');
} else // if (this.id == 'email-radio') {
$('#send').collapse('hide');
$('#pickup').collapse('hide');
$('#fax').collapse('hide');
$('#email').collapse('show');
}
});
};
这里有一个JS的链接,可以摆弄所有这些东西:http://jsfiddle.net/DTcHh/156/
不幸的是,我错过了一些东西,因为行为是奇怪的,不是我所期望的。
3条答案
按热度按时间hfsqlsce1#
首先,这个问题问得很好。你提供了代码,清楚地说明了你尝试了什么,等等。喜欢这个问题。
我把你的JSFiddle分叉了,然后想到了这个:http://jsfiddle.net/emptywalls/EgVF9/
下面是Javascript:
我不推荐使用Bootstrap的collapse功能,它依赖的DOM结构与你所需要的非常不同。我的小提琴只使用jQuery来完成你所需要的。我的方法是将单选按钮和div与类配对,这样你就可以干燥你的代码。
iaqfqrcu2#
正如@emptywalls所提到的,Bootstrap的折叠功能不起作用。我试过了,它几乎起作用了,除了它是基于 * 点击 * 源元素,而不是它的状态。单选按钮需要注意它的状态。
但是我想要的东西允许我用数据标签标记元素,并让它继承功能,就像引导崩溃一样。所以我想出了这个:
然后有这个包括一次在您的网站,它将适用于所有这样的按钮。
这将使用Bootstrap的collapse函数来制作动画。您可以使用jQuery
hide()
和show()
。zzwlnbp83#
除非我弄错了,否则如果您有另一组具有不同name属性的单选按钮,@jwadsack代码将无法工作。
这是因为
$item
和$target
变量是全局声明的。$item
变量将被最后一组覆盖,只有这一组将隐藏/显示折叠。在变量定义之前添加
var
似乎可以解决这个问题。代码为