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

CodeIgniter3+Bootstrap4环境DataTable行操作按钮无法打开模态框求助

问题产生原因

核心是动态DOM的事件绑定失效:
你使用的$('.btn-edit').on('click', function(){})是直接绑定写法,仅对$(document).ready()执行时已经存在于DOM中的元素生效。而你开启了DataTable的服务端渲染模式,表格行、操作按钮都是Ajax异步请求完成后才动态插入到页面的,初始化绑定事件时这些按钮还不存在,点击事件没有实际绑定到按钮上,所以点击没有响应。

解决方法

把直接绑定改成事件委托绑定,将事件绑定到页面初始化时就已存在的父级元素上,委托父元素监听子元素的点击事件,修改你的jQuery代码中的事件绑定部分即可:

<script>
$(document).ready(function(){
    $('#jobtitlesdatatable').DataTable({
        serverSide: true,
        searching: true,
        ajax: {
            url : "<?php echo base_url("jobtitle/jobtitles_page") ?>",
            type : 'post'
        },
    });
    // 编辑按钮委托绑定
    $(document).on('click', '.btn-edit', function(){
        const id = $(this).data('id');
        const title = $(this).data('name');
        console.log("JOBID: " + id);
        console.log("JOBTITLE: " + title);
        $('.job_id').val(id);
        $('.job_title').val(title);
        $('#editModal').modal('show');
    });
    // 删除按钮委托绑定
    $(document).on('click', '.btn-delete', function(){
        const id = $(this).data('id');
        $('.jobID').val(id);
        $('#deleteModal').modal('show');
    });
});
</script>

如果想要更好的性能,可以把委托的父元素从document换成页面初始化就存在的表格元素$('#jobtitlesdatatable'),减少事件冒泡的范围:

$('#jobtitlesdatatable').on('click', '.btn-edit', function(){
  // 原有逻辑不变
})
$('#jobtitlesdatatable').on('click', '.btn-delete', function(){
  // 原有逻辑不变
})

额外优化点

你编辑模态框的隐藏id输入框重复写了class属性:<input type="hidden" class="form-control job_id" name="job_id" class="jobID">,虽然不影响模态框弹出,但会导致class识别异常,建议修改为<input type="hidden" class="form-control job_id jobID" name="job_id">。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:21:00