You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中DataTable内Toggle Button无法正常显示及工作问题

问题分析与解决步骤

你的问题主要出在动态元素初始化、模板变量错误和事件绑定失效这几个点上,以下是针对性的修复方案:

1. 修复DataTable行数据引用错误

DataTable服务器端渲染时,mRender函数里不能直接用Laravel模板变量{{$colleges->id}},要通过函数提供的full参数获取当前行的完整数据:

mRender: function(data, type, full) {
    return `<input data-id="${full.id}" class="toggle-class" type="checkbox" 
            data-onstyle="success" data-offstyle="danger" 
            data-toggle="toggle" data-on="Active" data-off="InActive" 
            ${full.status ? "checked" : ""}>`;
}

2. 初始化动态生成的Toggle按钮

DataTable异步加载数据后,新生成的复选框不会自动被Bootstrap Toggle初始化,需要在表格绘制完成后手动初始化:

function fill_datatable(collegeID = '') {
    var table = $('.user_datatable1').DataTable({
        // 保留原有配置
        drawCallback: function(settings) {
            // 对新生成的toggle按钮做初始化
            $('.toggle-class').bootstrapToggle();
        }
    });
}

3. 用事件委托修复绑定失效问题

直接绑定change事件只能作用于页面初始元素,动态生成的元素需要通过父元素委托事件:

$(document).on('change', '.toggle-class', function() {
    var status = $(this).prop('checked') ? 1 : 0; 
    var user_id = $(this).data('id'); 
     
    $.ajax({
        type: "GET",
        dataType: "json",
        url: '/changeStatus',
        data: {'status': status, 'id': user_id}, // 修正原代码中变量名错误(id改为user_id)
        success: function(data){
          console.log(data.success)
        }
    });
})

完整修正后的代码

<script type="text/javascript">
    $(document).ready(function() {
        $.noConflict();
        fill_datatable();
        
        function fill_datatable(collegeID = '') {
            var table = $('.user_datatable1').DataTable({
                order: [[0, 'desc']],
                processing: true,
                serverSide: true,
                ajax: {
                    url: "{{ route('alumni.datatable1') }}",
                    data: { collegeID: collegeID }
                },
                columns: [
                    { data: 'id', name: 'id' },
                    { data: 'name', name: 'name' },
                    {
                        data: 'status',
                        name: 'status',
                        mRender: function(data, type, full) {
                            return `<input data-id="${full.id}" class="toggle-class" type="checkbox" 
                                    data-onstyle="success" data-offstyle="danger" 
                                    data-toggle="toggle" data-on="Active" data-off="InActive" 
                                    ${full.status ? "checked" : ""}>`;
                        }
                    },
                    {
                        data: 'action',
                        name: 'action',
                        orderable: false,
                        searchable: false
                    }
                ],
                drawCallback: function(settings) {
                    $('.toggle-class').bootstrapToggle();
                }
            });
        }         
    });
    
    $(document).on('change', '.toggle-class', function() {
        var status = $(this).prop('checked') ? 1 : 0; 
        var user_id = $(this).data('id'); 
         
        $.ajax({
            type: "GET",
            dataType: "json",
            url: '/changeStatus',
            data: {'status': status, 'id': user_id},
            success: function(data){
              console.log(data.success)
            }
        });
    })
</script>

内容的提问来源于stack exchange,提问作者Preethi Shetty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:06:00