Senkwe
Senkwe

Reputation: 2256

Unable to listen for a click event inside a bootstrap button-group from VueJS

I have the following bootstrap button group in a VueJS based project...

<div class="btn-group btn-group-xs pull-right" data-toggle="buttons">
  <label class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option1" autocomplete="off" v-on:click="clearEntries"> A
  </label>
  <label class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option2" autocomplete="off" v-on:click="clearEntries"> B
  </label>
  <label class="btn btn-primary active label-primary">
	<input type="radio" name="options" id="option3" autocomplete="off" checked v-on:click="clearEntries"> C
  </label>
   <label class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option4" autocomplete="off" v-on:click="clearEntries"> D
  </label>
</div>

All I want to do is call a method when one of the radio buttons is selected/checked.

But the click event is never fired. I'm not sure if it is being suppressed by the bootstrap css.

Any ideas?

Upvotes: 3

Views: 2015

Answers (1)

Happyriri
Happyriri

Reputation: 4443

Put the v-on:click="clearEntries" on the label and not the input.

new Vue({
  el: "#app",
  methods: {
    clearEntries: function() {
      alert('clearEntries !');
    }
  }
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.5/vue.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<div id="app">
<div class="btn-group btn-group-xs pull-right" data-toggle="buttons">
  <label v-on:click="clearEntries" class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option1" autocomplete="off"> A
  </label>
  <label v-on:click="clearEntries" class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option2" autocomplete="off"> B
  </label>
  <label v-on:click="clearEntries" class="btn btn-primary active label-primary">
	<input type="radio" name="options" id="option3" autocomplete="off" checked> C
  </label>
   <label v-on:click="clearEntries" class="btn btn-primary label-primary">
	<input type="radio" name="options" id="option4" autocomplete="off"> D
  </label>
</div>
</div>

Upvotes: 7

Related Questions