inside btn bootstrap html forms twitter-bootstrap radio-button

html - inside - input-group-btn bootstrap 3



Los botones de radio de arranque de Twitter no funcionan (5)

Tengo un problema con los botones de radio javascript bootstrap de twitter. Cuando selecciono uno y luego hago clic en el botón Enviar, no muestra el valor de radio seleccionado.

Mi código:

<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>

Como puede ver, hay un name="option" value="1" y name="option" value="2" pero cuando selecciono una radio y hago:

<?php print_r($_POST); ?>

No hay una option publicación especificada.

Sucede solo para los botones de radio de twitter, porque cuando agrego <input type="text" name="test" value="something"/> entonces aparecerá en la variable $_POST .

¿Dónde está el problema?


El código jQuery más simple que se me ocurrió fue:

<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="">

Es un caso de uso excepcional, para mí, por lo que no necesitaba ser robusto o flexible.


El problema es que <button> no envía nada cuando se hace clic. Tendrá que tener un campo de entrada oculto y disparar un cambio de valor dentro de la entrada cuando haga clic en el botón

<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>

En el caso del bootstrap, la ''radio'' solo afecta el estado y el comportamiento del botón. No afecta el comportamiento de la forma.


Esta es una alternativa jquery a la pieza anterior.

$("body").find(".btn").each(function(){ $(this).bind(''click'', function(){ $("input[name=view-opt-bt-group-value]").value = this.value }); });

El HTML para esto es:

<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>


Mi respuesta se basa en https://.com/a/16214643/1111662 por @mcNux

En su opinión (yo uso HAML pero me convierto a ERB si es necesario)

.btn-group{data:{toggle: "buttons-radio"}} %label.btn = f.radio_button :gender, "Male" Male %label.btn = f.radio_button :gender, "Female" Female

En su javascript específico de la vista, por ejemplo, pages.js.coffee (de nuevo, uso CoffeeScript pero lo convierto a JS JQuery simple si es necesario)

$(document).ready -> $(''.btn-group label.btn input[type=radio]'') .hide() .filter('':checked'').parent(''.btn'').addClass(''active'')


Puedes agregar la clase btn a <label> s, así que logré lo siguiente, que no requiere una entrada oculta, se degrada graciosamente si no hay bootstrap o javascript y aún puedes usar los helpers html.

Pruébalo .

<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>

Actualización: Están utilizando este formato ahora en Bootstrap 3 pero requiere un marcado ligeramente diferente (es decir, data-toggle="buttons" ). Ver http://getbootstrap.com/javascript/#buttons