【问题标题】:Twitter bootstrap radio buttons not workingTwitter引导单选按钮不起作用
【发布时间】: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" 但是当我选择一个收音机时:

&lt;?php print_r($_POST); ?&gt;

没有指定option 帖子。

它只发生在 twitter 单选按钮上,因为当我添加 &lt;input type="text" name="test" value="something"/&gt; 时,它会出现在 $_POST 变量中。

问题出在哪里?

【问题讨论】:

    标签: html forms twitter-bootstrap radio-button


    【解决方案1】:

    问题是&lt;button&gt; 在单击时不提交任何内容。您将需要一个隐藏的输入字段,并在单击按钮时触发输入内的值更改

    <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 类添加到&lt;label&gt;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://stackoverflow.com/a/16214643/1111662

        在您看来(我使用 HAML,但如果需要转换为 ERB)

        .btn-group{data:{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')
        

        【讨论】:

          猜你喜欢
          • 2018-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-27
          • 2016-06-19
          相关资源
          最近更新 更多