J'ai un Twitter Bootstrap buttons-radio et lui associe un événement onclick. Mais comment puis-je vérifier lequel des boutons a été déclenché?
Ma première idée a été de simplement vérifier la classe 'active', mais cela devrait créer une condition de concurrence critique (le résultat dépend du fait que l'événement Twitter Bootstrap ou mon propre événement onclick soit traité en premier).
C'est vraiment un ennuyeux. Ce que j'ai fini par utiliser est la suivante:
Tout d’abord, créez un groupe de boutons simples sans data-toggle
attribut.
<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>
Ensuite, écrivez un gestionnaire d'événements qui simule l'effet du bouton radio en "activant" celui sur lequel vous avez cliqué et en "désactivant" tous les autres boutons. (EDIT: Integrated Nick version plus propre des commentaires.)
$('#selector button').click(function() {
$(this).addClass('active').siblings().removeClass('active');
// TODO: insert whatever you want to do with $(this) here
});
Je vois beaucoup de réponses compliquées, alors que cela est super simple dans Bootstrap 3:
Étape 1: Utilisez le code d'exemple officiel pour créer votre groupe de boutons radio et attribuez un identifiant au conteneur:
<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>
Étape 2: Utilisez ce gestionnaire jQuery:
$("#myButtons :input").change(function() {
console.log(this); // points to the clicked input button
});
Je voudrais utiliser un événement de changement pas un clic comme ça:
$('input[name="name-of-radio-group"]').change( function() {
alert($(this).val())
})
Pour Bootstrap la structure par défaut du groupe radio/boutons est la suivante:
<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>
Et vous pouvez sélectionner l'actif comme ceci:
$('.btn-primary').on('click', function(){
alert($(this).find('input').attr('id'));
});
N'utilisez pas l'attribut data-toggle pour pouvoir contrôler vous-même le comportement de bascule. Donc, cela évitera les "conditions de course"
mes codes:
modèle de groupe de boutons (écrit en .erb, intégré Ruby pour Ruby sur Rails)]:
<div class="btn-group" id="featuresFilter">
<% _.each(features, function(feature) { %> <button class="btn btn-primary" data="<%= feature %>"><%= feature %></button> <% }); %>
</div>
et javascript:
onChangeFeatures = function(e){
var el=e.target;
$(el).button('toggle');
var features=el.parentElement;
var activeFeatures=$(features).find(".active");
console.log(activeFeatures);
}
la fonction onChangeFeatures sera déclenchée une fois le bouton cliqué.
Je devais faire la même chose pour un graphique où vous pouvez sélectionner la période des données à afficher.
Par conséquent, j'ai introduit la classe CSS 'btn-group-radio' et utilisé le javascript one-liner non intrusif suivant:
// application.js
$(document).ready(function() {
$('.btn-group-radio .btn').click(function() {
$(this).addClass('active').siblings('.btn').removeClass('active');
});
});
Et voici le 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>
J'ai cherché tellement de pages: j'ai trouvé une belle solution. Vérifiez-le:
<!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>
En regardant l'exemple HTML pour les boutons radio sur la page Twitter Bootstrap ( http://Twitter.github.com/bootstrap/base-css.html#forms ) , vous pouvez voir que chaque entrée a un attribut ID unique, c’est-à-dire optionsRadios1
et optionsRadios2
.
L'extrait d'exemple HTML pertinent est inclus ici pour plus de détails:
<div class = "controls"> <label class = "radio"> <type d'entrée = "radio" vérifié = "" valeur = "option1" id = " optionsRadios1 "name =" optionsRadios "> La première option est la suivante: assurez-vous d’inclure pourquoi il est si bon </ label> <label class =" radio "> <type d'entrée = "radio" valeur = "option2" id = "optionsRadios2" nom = "optionsRadios"> La deuxième option est différente et sa sélection désélectionnera l'option un . </ label> </ div>
Vous pouvez donc utiliser un événement de clic jQuery, puis utiliser la référence this
pour examiner l'id de l'élément HTML sur lequel vous avez cliqué.
$ ('. contrôles'). find ('entrée'). bind ('clic', fonction (événement) { if ($ (this) .attr ('id') = == 'optionsRadios1') { alert ($ (this) .attr ('id')); } else { // ... appeler une autre fonction } });