Twitter Bootstrap buttons-radioがあり、それにonclickイベントをフックします。しかし、どのボタンがトリガーされたかを確認するにはどうすればよいですか?
最初に考えたのは、単にクラス「アクティブ」をチェックすることでしたが、これにより競合状態が発生するはずです(結果はTwitter Bootstrapイベントまたは自分のonclickイベントが最初に処理されるかどうかによって異なります)。
これは本当に迷惑なものです。私が最終的に使用したのはこれです:
最初に、data-toggle
属性を持たない単純なボタンのグループを作成します。
<div id="selector" class="btn-group">
<button type="button" class="btn active">Day</button>
<button type="button" class="btn">Week</button>
<button type="button" class="btn">Month</button>
<button type="button" class="btn">Year</button>
</div>
次に、クリックされたボタンを「アクティブ化」し、他のすべてのボタンを「非アクティブ化」することにより、ラジオボタンの効果をシミュレートするイベントハンドラを記述します。 (編集:統合 Nick のコメントからのクリーナーバージョン。)
$('#selector button').click(function() {
$(this).addClass('active').siblings().removeClass('active');
// TODO: insert whatever you want to do with $(this) here
});
これはBootstrap 3で非常に簡単ですが、多くの複雑な答えがあります:
ステップ1: 公式のサンプルコード を使用してラジオボタングループを作成し、コンテナに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>
ステップ2:次のjQueryハンドラーを使用します。
$("#myButtons :input").change(function() {
console.log(this); // points to the clicked input button
});
このようなクリックではなく、変更イベントを使用します。
$('input[name="name-of-radio-group"]').change( function() {
alert($(this).val())
})
For Bootstrapデフォルトのラジオ/ボタングループ構造は次のとおりです。
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary">
<input type="radio" name="options" id="option1"> Option 1
</label>
<label class="btn btn-primary">
<input type="radio" name="options" id="option2"> Option 2
</label>
<label class="btn btn-primary">
<input type="radio" name="options" id="option3"> Option 3
</label>
</div>
そして、次のようにアクティブなものを選択できます。
$('.btn-primary').on('click', function(){
alert($(this).find('input').attr('id'));
});
ユーザーがトグル動作を制御できるように、データトグル属性を使用しないでください。したがって、「競合状態」を回避します
私のコード:
ボタングループテンプレート(.erbで記述され、Ruby on Railsの埋め込みRuby):
<div class="btn-group" id="featuresFilter">
<% _.each(features, function(feature) { %> <button class="btn btn-primary" data="<%= feature %>"><%= feature %></button> <% }); %>
</div>
およびjavascript:
onChangeFeatures = function(e){
var el=e.target;
$(el).button('toggle');
var features=el.parentElement;
var activeFeatures=$(features).find(".active");
console.log(activeFeatures);
}
onChangeFeatures関数は、ボタンがクリックされるとトリガーされます。
表示するデータの期間を選択できるチャートでも同じことを行う必要がありました。
そのため、CSSクラス「btn-group-radio」を導入し、次の控えめなjavascriptワンライナーを使用しました。
// application.js
$(document).ready(function() {
$('.btn-group-radio .btn').click(function() {
$(this).addClass('active').siblings('.btn').removeClass('active');
});
});
そして、これが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>
私は非常に多くのページを検索しました:美しい解決策を見つけました。見てみな:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script>
$(function() {
$("#my_launch_today_chk").change(function() {
var chk = $(this).prop('checked');
if(chk == true){
console.log("On");
}else{
console.log("OFF");
}
});
});
</script>
</head>
<body >
<input type="checkbox" id="my_launch_today_chk" checked data-on="Launch" data-off="OFF" data-toggle="toggle" data-size="small">
</body>
</html>
Twitter Bootstrapページ( http://Twitter.github.com/bootstrap/base-css.html#forms )のラジオボタンのHTML例を見ると、次のことができます。各入力に一意のID属性、つまりoptionsRadios1
とoptionsRadios2
があることを確認してください。
関連するHTMLサンプルスニペットは、完全を期すためにここに含まれています。
<div class = "controls"> <label class = "radio"> <input type = "radio" checked = "" value = "option1" id = " optionsRadios1 "name =" optionsRadios "> オプション1はこれです-それが素晴らしい理由を必ず含めてください </ label> <label class =" radio "> <input type = "radio" value = "option2" id = "optionsRadios2" name = "optionsRadios"> オプション2は別のものであり、それを選択するとオプション1 が選択解除されます。 </ label> </ div>
したがって、jQueryクリックイベントを使用し、this
参照を使用して、クリックされたHTML要素のIDを確認できます。
$( '。controls')。find( 'input')。bind( 'click'、function(event){ if($(this).attr( 'id')= == 'optionsRadios1'){ alert($(this).attr( 'id')); } else { // ...他の関数を呼び出す } });