Twitter引导单选按钮不起作用
Posted
技术标签:
【中文标题】Twitter引导单选按钮不起作用【英文标题】:Twitter bootstrap radio buttons not working 【发布时间】:2012-07-12 19:53:41 【问题描述】:我的 twitter bootstrap javascript 单选按钮有问题。当我选择一个然后单击提交按钮时,它不会显示选定的单选值。
我的代码:
<form action="" class="form-horizontal" method="post">
<fieldset>
<div class="control-group">
<label class="control-label">Type:</label>
<div class="controls">
<div class="btn-group" data-toggle="buttons-radio">
<button type="button" data-toggle="button" name="option" value="1" class="btn btn-primary">Option One</button>
<button type="button" data-toggle="button" name="option" value="2" class="btn btn-primary">Option Two</button>
</div>
</div>
</div>
<div class="form-actions">
<input class="btn btn-primary" type="submit" value="Go">
<a href="index.php" class="btn">Back</a>
</div>
</fieldset>
</form>
如您所见,有一个 name="option" value="1"
和 name="option" value="2"
但是当我选择一个收音机时:
<?php print_r($_POST); ?>
没有指定option
帖子。
它只发生在 twitter 单选按钮上,因为当我添加 <input type="text" name="test" value="something"/>
时,它会出现在 $_POST
变量中。
问题出在哪里?
【问题讨论】:
【参考方案1】:问题是<button>
在单击时不提交任何内容。您将需要一个隐藏的输入字段,并在单击按钮时触发输入内的值更改
<input type="hidden" name="option" value="" id="btn-input" />
<div class="btn-group" data-toggle="buttons-radio">
<button id="btn-one" type="button" data-toggle="button" name="option" value="1" class="btn btn-primary">Option One</button>
<button id="btn-two" type="button" data-toggle="button" name="option" value="2" class="btn btn-primary">Option Two</button>
</div>
<script>
var btns = ['btn-one', 'btn-two'];
var input = document.getElementById('btn-input');
for(var i = 0; i < btns.length; i++)
document.getElementById(btns[i]).addEventListener('click', function()
input.value = this.value;
);
</script>
在引导程序的情况下,“收音机”仅影响按钮状态和行为。它不会影响表单行为。
【讨论】:
这对我很有用,并附有完整的实现示例。非常感谢。【参考方案2】:这是上述作品的 jquery 替代品。
$("body").find(".btn").each(function()
$(this).bind('click', function()
$("input[name=view-opt-bt-group-value]").value = this.value
);
);
html 是:
<div class="row pull-right">
<div class="btn-group view-opt-btn-group" data-toggle="buttons-radio">
<button type="button" class="btn" value="0"><i class="icon-th-list"></i></button>
<button type="button" class="btn" value="1"><i class="icon-th-list"></i></button>
<input type="hidden" name="view-opt-bt-group-value" value="0">
</div>
</div>
【讨论】:
我想你想要 $("input[name=view-opt-bt-group-value]").val(this.value)【参考方案3】:您可以将btn
类添加到<label>
s,因此我实现了以下不需要隐藏输入的操作,如果没有引导程序或javascript,则可以优雅地降级,并且您仍然可以使用html 帮助程序。
Try it out.
<div class="btn-group" data-toggle="buttons-radio">
<label class="btn">@Html.RadioButton("option", 1) Option 1</label>
<label class="btn">@Html.RadioButton("option", 2) Option 2</label>
</div>
...
<script type="text/javascript">
$(function ()
// Bootstrappable btn-group with checkables inside
// - hide inputs and set bootstrap class
$('.btn-group label.btn input[type=radio]')
.hide()
.filter(':checked').parent('.btn').addClass('active');
);
</script>
更新:他们现在在 Bootstrap 3 中使用这种格式,但它需要稍微不同的标记(即data-toggle="buttons"
)。见http://getbootstrap.com/javascript/#buttons
【讨论】:
【参考方案4】:我想出的最简单的 jQuery 代码是:
<div class="btn-group" data-toggle="buttons-radio">
<button type="button" class="btn" onClick="$('#gender').val('f');">♀</button>
<button type="button" class="btn" onClick="$('#gender').val('m');">♂</button>
</div>
<input name="gender" id="gender" type="hidden" value="">
对我来说,这是一个特殊的用例,所以它不需要强大或灵活。
【讨论】:
【参考方案5】:我的回答是基于@mcNux 的https://***.com/a/16214643/1111662
在您看来(我使用 HAML,但如果需要转换为 ERB)
.btn-groupdata:toggle: "buttons-radio"
%label.btn
= f.radio_button :gender, "Male"
Male
%label.btn
= f.radio_button :gender, "Female"
Female
在您特定于视图的 javascript 中,例如pages.js.coffee
(同样,我使用 CoffeeScript,但如果需要,转换为纯 JS JQuery)
$(document).ready ->
$('.btn-group label.btn input[type=radio]')
.hide()
.filter(':checked').parent('.btn').addClass('active')
【讨论】:
以上是关于Twitter引导单选按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章