Reputation: 346
I have implemented a function that adds the class active upon click of any of the buttons from 1-5
$('#live-chat').on('click', '.circle', function(){
if ($(this)[0]['class']!=='circle active') { $(this).addClass("active") }
Now as you can see the active class is on button 2, showing that it's selected. However I would like to remove the class active from 2 for the particular question_id the user is on
<div class='container' id='" + item.question_id + "'>
<div class='progress required' id='progress' surveyType='Individual'></div>
<div class='progress-container' id='" + item.question + "' name='number_scoring'>
<div class='circle' id='" + item.question_id + "' value='1'>1</div>
<div class='circle active' id='" + item.question_id + "' value='2'>2</div>
<div class='circle' id='" + item.question_id + "' value='3'>3</div>
<div class='circle' id='" + item.question_id + "' value='4'>4</div>
<div class='circle' id='" + item.question_id + "' value='5'>5</div>
</div></div></div></div></div>"
so to do this, I need to target 2 things ie 1) targeting class='container' 2) with id that corresponds to the current id the user is on, then only proceed to remove the class active from that particular id. What I have now is this that isn't quite right as it's throwing a syntax error. I'm new to jQuery, hoping someone could help. Thanks
$(`# ${scoring_question_id} .container`).removeClass("active");
Upvotes: 1
Views: 49
Reputation: 28522
You can use siblings().removeClass("active")
to remove active class from other divs and then use toggleClass("active")
to add/remove active class from the one which is clicked.Also , you cannot have same ids for mutliple elements so use data-*
attribute or class.
Demo Code :
$('#live-chat').on('click', '.circle', function() {
$(this).siblings().removeClass("active") //remove active class from siblings
$(this).toggleClass("active") //add or remove from one which is clicked
})
.active {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="live-chat">
Question 1 :
<div class='container' id='1'>
<div class='progress required' surveyType='Individual'></div>
<div class='progress-container' id='" + item.question + "' name='number_scoring'>
<div class='circle' data-id='1' value='1'>1</div>
<div class='circle active' data-id='1' value='2'>2</div>
<div class='circle' data-id='1' value='3'>3</div>
<div class='circle' data-id='1' value='4'>4</div>
<div class='circle' data-id='1' value='5'>5</div>
</div>
</div>
Questio 2 :
<div class='container' id='2'>
<div class='progress required' surveyType='Individual'></div>
<div class='progress-container' id='" + item.question + "' name='number_scoring'>
<div class='circle' data-id='2' value='1'>1</div>
<div class='circle active' data-id='2' value='2'>2</div>
<div class='circle' data-id='2' value='3'>3</div>
<div class='circle' data-id='2' value='4'>4</div>
<div class='circle' data-id='2' value='5'>5</div>
</div>
</div>
</div>
Upvotes: 0
Reputation: 1882
it should be:
$(`#${scoring_question_id}.container`).removeClass("active");
So without spaces between.
If you have an HTML element with id and class, for instance like this:
<div class="world" id="hello"></div>
Then it would be:
$('#hello.world');
If you have for example an embedded element, such as this:
<div class="hello"><div id="world"></div></div>
then you could do
$('.hello #world') // with spacing
Upvotes: 1