Laravel 8集成DataTable插件报错无法正常运行问题咨询
问题修复方案
核心错误原因
DataTable初始化失败主要由以下几个问题导致:
- 表格结构不符合DataTable要求:缺少
<thead>和<tbody>标签,DataTable强制要求表头和表体必须用对应标签包裹 - 表头存在
colspan属性且列数不匹配:普通模式下DataTable要求表头每列和表体列数严格对应,不支持直接在表头使用colspan合并列 - 潜在的jQuery冲突:Laravel默认打包的
app.js已经内置jQuery,你额外引入的jQuery和带defer属性的app.js加载顺序冲突,会导致已挂载的DataTable方法被覆盖
具体修复步骤
1. 调整表格HTML结构,补充thead和tbody,处理colspan问题
把视图文件里的表格代码改成如下格式:
<div class="table-responsive"> <table class="table table-bordered table-hover bg-white" id="medicos"> <thead> <tr class="info"> <th>Nombre</th> <th>Apellido</th> <th>Cedula</th> <th>Usuario</th> <th>Email</th> <th>Especialidades</th> <th>Teléfono</th> <th>Género</th> <th>Editar</th> <th>Borrar</th> </tr> </thead> <tbody> @foreach ($medicos as $key=>$medico) <tr> <td>{{$medico->nombre}}</td> <td>{{$medico->apellido}}</td> <td>{{$medico->cedula}}</td> <td>{{$medico->Users->name}}</td> <td>{{$medico->email}}</td> <td> @foreach ($medico->Persona_especialidad as $especialidad) {{$especialidad->nombre}} @endforeach </td> <td>{{$medico->telefono}}</td> <td>{{$medico->genero}}</td> <td><a href="{{route('medico.edit', $medico->id)}}">Editar</a></td> <td><a href="{{route('medico.borrar', $medico->id)}}">Borrar</a></td> </tr> @endforeach </tbody> </table> </div>
注:原代码中{{$medico->Persona_especiaidad}}为拼写错误,已直接移除
2. 调整JS加载顺序,避免jQuery冲突
打开app.blade.php,删除你手动引入的jQuery代码行:
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
然后调整视图文件里的DataTable初始化代码,包裹在DOM加载完成的回调里:
<script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js"></script> <script> $(document).ready(function() { $('#medicos').DataTable(); }); </script>
如果修复后还是有冲突,可以把app.js的defer属性移除,确保它在DataTable加载前执行完成。
3. 补充DataTable对应样式
在app.blade.php的样式引入部分,添加DataTable的Bootstrap4样式文件即可正常显示样式效果。
内容的提问来源于stack exchange,提问作者Diego Utreras
相关产品推荐
相关产品推荐

