I have a Data-table that is being populated with server-side code.
<table id="email_alerts" class="table">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.crmContactsList)
{
<tr>
<td>@item.fname</td>
<td>
@if (item.claimsOpenedAlert)
{
<div class="control-label">
<div class="toggle toggle-primary" data-toggle-on="true" data-contact-id="@item.crmContactID"></div>
</div>
}
else
{
<div class="control-label">
<div class="toggle toggle-primary" data-toggle-on="false" data-contact-id="@item.crmContactID"></div>
</div>
}
</td>
</tr>
}
</tbody>
</table>
I use this jQuery to initialize all of the jQuery Toggles to be set to what the database returned.
jQuery('.toggle').each(function () {
$(this).toggles({
on: $(this).data('toggle-on')
});
});
I use this code to alter their state when they are clicked on. Off goes to on and vice versa.
// Toggle Switches
$('.toggle').on('click', function () {
console.log($(this).data('toggle-on'));
if ($(this).data('toggle-on') == true) {
$(this).data('toggle-on', false)
console.log('Turning off ' + $(this).data('contact-id'));
}
else {
$(this).data('toggle-on', true)
console.log('Turning on ' + $(this).data('contact-id'));
}
});
Now all of this works perfectly, except when I click on any page other than the first page for Data-tables. Page 2+ they all default to being turned on.
Any idea why this works for the first page but not for other pages in data-tables?
Initialise the toggles plugin dynamically, so you also "toggles" elements injected when changing page, sorting etc :
You must also use a delegated event handler. As it is now, you only have a click-handler for the toggles on the first page :
demo -> http://jsfiddle.net/gmptpbqg/ where all
.toggle
elements become "toggled" and on / off state is remembered correctly across the pages.You can use a DataTable callback function like this:
It works fine for me. Good luck!!!
Just sharing my answer since I am working with Bootstrap Toggle and not JQuery Toggle, but I used some of the accepted answer above:
Below code doesn't work since whenever I click the pagination of DataTable, the bindings become erratic, so I used the modified version code above: