Twitter Bootstrap onclick event on buttons-radio

后端 未结 9 1674
傲寒
傲寒 2020-12-13 03:51

I have a Twitter Bootstrap buttons-radio and hook an onclick event to it. But how do I check which of the buttons that got triggered?

My first thought was to simply

相关标签:
9条回答
  • 2020-12-13 03:57

    Looking at the example HTML for radio buttons on the Twitter Bootstrap page (http://twitter.github.com/bootstrap/base-css.html#forms), you can see that each input has a unique ID attribute, i.e. optionsRadios1 and optionsRadios2.

    The relevant HTML example snippet is included here for completeness:

    <div class="controls">
      <label class="radio">
        <input type="radio" checked="" value="option1" id="optionsRadios1" name="optionsRadios">
        Option one is this and that—be sure to include why it's great
      </label>
      <label class="radio">
        <input type="radio" value="option2" id="optionsRadios2" name="optionsRadios">
        Option two can is something else and selecting it will deselect option one
      </label>
    </div>
    

    So you can use a jQuery click event, and then use the this reference to look at the id of the HTML element that was clicked.

    $('.controls').find('input').bind('click',function(event){
      if($(this).attr('id')==='optionsRadios1'){
        alert($(this).attr('id'));
      } else {
        //... call some other function
      }
    });
    
    0 讨论(0)
  • 2020-12-13 04:01

    If your html is similar to the example, so the click event is produced over the label, not in the input, so I use the next code: Html example:

    <div id="myButtons" class="btn-group" data-toggle="buttons">
      <label class="btn btn-primary active">
        <input type="radio" name="options" id="option1" autocomplete="off" checked> Radio 1 (preselected)
      </label>
      <label class="btn btn-primary">
        <input type="radio" name="options" id="option2" autocomplete="off"> Radio 2
      </label>      
    </div>
    

    Javascript code for the event:

    $('#option1').parent().on("click", function () {
       alert("click fired"); 
    });
    
    0 讨论(0)
  • 2020-12-13 04:03

    I see a lot of complicated answers, while this is super simple in Bootstrap 3:

    Step 1: Use the official example code to create your radio button group, and give the container an id:

    <div id="myButtons" class="btn-group" data-toggle="buttons">
      <label class="btn btn-primary active">
        <input type="radio" name="options" id="option1" autocomplete="off" checked> Radio 1 (preselected)
      </label>
      <label class="btn btn-primary">
        <input type="radio" name="options" id="option2" autocomplete="off"> Radio 2
      </label>
      <label class="btn btn-primary">
        <input type="radio" name="options" id="option3" autocomplete="off"> Radio 3
      </label>
    </div>
    

    Step 2: Use this jQuery handler:

    $("#myButtons :input").change(function() {
        console.log(this); // points to the clicked input button
    });
    

    Try the fiddle demo

    0 讨论(0)
  • 2020-12-13 04:05

    I needed to do the same thing for a chart where you could select the period of the data that should be displayed.

    Therefore I introduced the CSS class 'btn-group-radio' and used the following unobtrusive javascript one-liner:

    // application.js
    $(document).ready(function() {
      $('.btn-group-radio .btn').click(function() {
        $(this).addClass('active').siblings('.btn').removeClass('active');
      });
    });
    

    And here is the HTML:

    <!-- some arbitrary view -->
    <div class="btn-group btn-group-radio">
      <%= link_to '1W', charts_path('1W'), class: 'btn btn-default active', remote: true %>
      <%= link_to '1M', charts_path('1M'), class: 'btn btn-default', remote: true %>
      <%= link_to '3M', charts_path('3M'), class: 'btn btn-default', remote: true %>
      <%= link_to '6M', charts_path('6M'), class: 'btn btn-default', remote: true %>
      <%= link_to '1Y', charts_path('1Y'), class: 'btn btn-default', remote: true %>
      <%= link_to 'All', charts_path('all'), class: 'btn btn-default', remote: true %>
    </div>
    
    0 讨论(0)
  • 2020-12-13 04:07

    I would use a change event not a click like this:

    $('input[name="name-of-radio-group"]').change( function() {
      alert($(this).val())
    })
    
    0 讨论(0)
  • 2020-12-13 04:10

    Don't use data-toggle attribute so that you can control the toggle behavior by yourself. So it will avoid 'race-condition'

    my codes:

    button group template (written in .erb, embedded ruby for ruby on rails):

    <div class="btn-group" id="featuresFilter">
         <% _.each(features, function(feature) { %> <button class="btn btn-primary" data="<%= feature %>"><%= feature %></button> <% }); %>
    </div>
    

    and javascript:

    onChangeFeatures = function(e){
            var el=e.target;
            $(el).button('toggle');
    
            var features=el.parentElement;
            var activeFeatures=$(features).find(".active");
            console.log(activeFeatures);
    }
    

    onChangeFeatures function will be triggered once the button is clicked.

    0 讨论(0)
提交回复
热议问题