使用jQuery-toggles的数据表不能在第1页以外的页面上工作

时间:2015-04-27 22:54:18

标签: jquery jquery-plugins datatables

我有一个用服务器端代码填充的数据表。

<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>

我使用这个jQuery来初始化所有要设置为数据库返回的jQuery Toggles。

jQuery('.toggle').each(function () {
            $(this).toggles({
                on: $(this).data('toggle-on')
            });
        });

我使用此代码在单击时更改其状态。关闭继续,反之亦然。

// 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'));
            }
        });

现在所有这一切都完美无缺,除非我点击数据表第一页以外的任何页面。他们都默认开启。

知道为什么这适用于第一页但不适用于数据表中的其他页面?

3 个答案:

答案 0 :(得分:1)

动态初始化toggles插件,因此您还可以“切换”更改页面,排序等时注入的元素:

jQuery('#example').on('draw.dt', function() {
    jQuery('.toggle').each(function() {
        $(this).toggles({
           on: $(this).data('toggle-on')
        });
    });
}); 

您还必须使用委派的事件处理程序。就像现在一样,你只有第一页上切换的点击处理程序:

$('#example').on('click', '.toggle', 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'));
    }
});

演示 - &gt; http://jsfiddle.net/gmptpbqg/ 所有.toggle个元素都会“切换”,并且会在页面中正确记住开/关状态。

答案 1 :(得分:0)

您可以使用这样的DataTable回调函数:

$('#email_alerts').DataTable( {

    "scrollCollapse": true,
    "paging":         true,
    "fnDrawCallback": function() {
        jQuery('.toggle').bootstrapToggle();
    }

} );

对我来说很好。祝你好运!!!

答案 2 :(得分:0)

因为我使用的是Bootstrap Toggle,而不是JQuery Toggle,所以只分享我的答案,但是我使用了上面接受的一些答案:

$('#tblMyTable').on('draw.dt', function () {
            $('.myInputCheckBoxClass').bootstrapToggle();

            fncAdditionalBindingLogicForBoostrapToggle(); //In case you need any logic when you click the toggle button

        });

下面的代码不起作用,因为每当我单击DataTable的分页时,绑定都变得不稳定,因此我使用了上面的修改后的版本代码:

$('#tblCFRMode').on('draw.dt', function () {

              $('.myInputCheckBoxClass').each(function () {

              if ($(this).prop('checked') == true) {
                $(this).bootstrapToggle('on');
              } else {
                $(this).bootstrapToggle('off');
              }
          });
      });