JSFiddle - React, Tailwind, and code Playground
by RoryMcCrossan
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" />
<div id="accordion">
<!-- repeated content \/ -->
<div class="card">
<div class="card-header headingThree">
<h5 class="mb-0 d-flex">
<div class="billing">
<input type="checkbox" class="billing-checkbox" />
<button class="btn btn-info text-white collapsed d-flex align-center" data-toggle="collapse" data-target="#<%= turma.nome %>" aria-expanded="false" aria-controls="turma.nome" id="btn">
turma.nome
</button>
</div>
</h5>
</div>
</div>
<!-- repeated content /\ -->
<div class="card">
<div class="card-header headingThree">
<h5 class="mb-0 d-flex">
<div class="billing">
<input type="checkbox" class="billing-checkbox" />
<button class="btn btn-info text-white collapsed d-flex align-center" data-toggle="collapse" data-target="#<%= turma.nome %>" aria-expanded="false" aria-controls="turma.nome" id="btn">
turma.nome
</button>
</div>
</h5>
</div>
</div>
<div class="card">
<div class="card-header headingThree">
<h5 class="mb-0 d-flex">
<div class="billing">
<input type="checkbox" class="billing-checkbox" />
<button class="btn btn-info text-white collapsed d-flex align-center" data-toggle="collapse" data-target="#<%= turma.nome %>" aria-expanded="false" aria-controls="turma.nome" id="btn">
turma.nome
</button>
</div>
</h5>
</div>
</div>
<div class="card">
<div class="card-header headingThree">
<h5 class="mb-0 d-flex">
<div class="billing">
<input type="checkbox" class="billing-checkbox" />
<button class="btn btn-info text-white collapsed d-flex align-center" data-toggle="collapse"...
JavaScript
jQuery($ => {
let $billingCheckboxes = $('.billing-checkbox').on('change', e => {
$(e.target).next('button').prop('disabled', !e.target.checked);
saveUIState();
});
let setUIState = () => {
let state = JSON.parse(localStorage.getItem('checkbox-state') || '[]');
state.forEach((state, i) => {
$billingCheckboxes.eq(i).prop('checked', state).next('button').prop('disabled', !state);
});
}
let saveUIState = () => {
let state = $billingCheckboxes.map((i, el) => el.checked).get();
localStorage.setItem('checkbox-state', JSON.stringify(state));
}
setUIState();
});