【发布时间】:2022-01-11 03:46:32
【问题描述】:
我正在使用 bootstrap 4 中的 DataTable 并已成功在其上加载数据,但问题是每当我单击行操作按钮(delete 或 edit)时不打开各自的模态。
这是我的数据表的当前输出:
这是我用于编辑和删除的 DataTable 和 Modals 的 HTML 代码 (index.php):
<div class="col-md-12">
<table id="jobtitlesdatatable" class="table table-bordered table-striped">
<thead>
<tr>
<th>#</th>
<th>Job Title</th>
<th>Date Created</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<!-- Edit Job Title Modal -->
<form action="<?= base_url('jobtitle/editJobTitle') ?>" method="post">
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Edit Job Title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Job Title</label>
<input type="text" class="form-control job_title" name="job_title" placeholder="Job Title" required>
</div>
</div>
<div class="modal-footer">
<input type="hidden" class="form-control job_id" name="job_id" class="jobID">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
</div>
</form>
<!-- End Modal Create Job Title -->
<!-- Modal Delete Job Title -->
<form action="<?= base_url('jobtitle/deleteJobTitle') ?>" method="post">
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Delete Job Title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<h4>Are you sure want to delete this Job Title?</h4>
</div>
<div class="modal-footer">
<input type="hidden" name="job_id" class="jobID">
<button type="button" class="btn btn-secondary" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-danger">Yes</button>
</div>
</div>
</div>
</div>
</form>
<!-- End Modal Delete Product-->
这是我的 JQuery 部分 (index.php):
<script>
$(document).ready(function(){
$('#jobtitlesdatatable').DataTable({
serverSide: true,
searching: true,
ajax: {
url : "<?php echo base_url("jobtitle/jobtitles_page") ?>",
type : 'post'
},
});
// get Edit Product
$('.btn-edit').on('click',function(){
// get data from button edit
const id = $(this).data('id');
const title = $(this).data('name');
console.log("JOBID: " + id);
console.log("JOBTITLE: " + title);
// Set data to Form Edit
$('.job_id').val(id);
$('.job_title').val(title);
// Call Modal Edit
$('#editModal').modal('show');
});
$('.btn-delete').on('click',function(){
// get data from button edit
const id = $(this).data('id');
// Set data to Form Edit
$('.jobID').val(id);
// Call Modal Edit
$('#deleteModal').modal('show');
});
});
这是 Controller 文件中 jobtitles_page() 的代码:
public function jobtitles_page()
{
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$jobtitles = $this->JobTitleModel->get_all('jobtitle', null);
$data = array();
foreach($jobtitles as $jobTitle) {
$data[] = array(
$jobTitle->JOBID,
$jobTitle->JOBTITLE,
$jobTitle->CREATEDDATE,
$jobTitle->href = '<a href="#" class="btn btn-warning btn-sm btn-edit" data-id="'.$jobTitle->JOBID.'" data-name="'.$jobTitle->JOBTITLE.'"><span class="fa fa-edit"></span></a>
<a href="#" class="btn btn-danger btn-delete" data-id="'. $jobTitle->JOBID.'"><span class="fa fa-trash"></span></a>'
);
}
$output = array(
"draw" => $draw,
"recordsTotal" => count($jobtitles),
"recordsFiltered" => count($jobtitles),
"data" => $data
);
echo json_encode($output);
exit();
}
当我在开发控制台中检查它的元素时,它会显示:
它正确地传递了 ID 和 JOBTITLE。
可能是什么原因导致此问题以及解决方法是什么?
【问题讨论】:
-
不要使用直接事件处理程序(例如
$('.btn-edit').on('click',function(){...});,而是使用委托事件处理程序:$('tbody').on('click', '.btn-edit', function(){...});。有关讨论和解释,请参阅Direct vs. Delegated - jQuery .on()。基本上,您正在尝试附加事件到页面中(尚)不存在的东西 - 要么是因为 DataTable 仍在初始化过程中,要么您正在访问表结果的后续页面。
标签: javascript jquery bootstrap-4 datatables codeigniter-3