javascript
[js] 페이징 컨트롤러 별도 배치
TTTGGG
2024. 7. 29. 16:10
728x90
반응형
SMALL
테이블 높이에 따라 페이징 컨트롤러의 위치가 변경되는 것을 방지하기 위해 페이징 컨트롤러를 별도로 배치
html
<div class="row" style="height: 650px; position: relative;">
<div class="col-md" style="height: 90%;">
<table id="grdS01" class="table table-bordered table-striped table-hover" style="width:100%; height: 90%;">
<thead>
<tr>
<th rowspan="2" style="width:30px; text-align:center;"><input type="checkbox" id="select-all"></th>
<th name="commGrp" rowspan="2" style="width:100px; text-align:center;">그룹</th>
<th name="commCd" rowspan="2" style="width:100px; text-align:center;">코드</th>
<th name="commNm" rowspan="2" style="width:100px; text-align:center;">코드명</th>
<th name="commRmk" rowspan="2" style="width:150px; text-align:center;">비고</th>
<th name="useYN" rowspan="2" style="width:150px; text-align:center;">사용여부</th>
<th name="dispNo" rowspan="2" style="width:150px; text-align:center; display:none;">순서</th>
<th colspan="2" style="text-align:center;">등록</th>
<th colspan="2" style="text-align:center;">갱신</th>
</tr>
<tr>
<th name="regDtm" style="width:150px; text-align:center;">등록일시</th>
<th name="regUsr" style="width:150px; text-align:center;">등록자</th>
<th name="uptDtm" style="width:150px; text-align:center;">갱신일시</th>
<th name="uptUsr" style="width:200px; text-align:center;">갱신자</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<!-- 페이징 컨트롤을 별도로 배치 -->
<div id="S01_paging-controls" style="position: absolute; bottom: 0; width: 100%; text-align: center; background-color: #f9f9f9; padding: 10px;">
<div id="S01_paging-controls-inner"></div>
</div>
</div>
script
var fnCommGridSetting = function (...) {
...
var table = $(gridId).DataTable({
fixedHeader: true,
paging: true,
pagingType: 'simple_numbers',
ajax: {
type: "POST",
url: ajaxUrl,
data: function (d) {
return $.extend({}, {
draw: d.draw,
start: d.start,
length: d.length
}, ajaxData);
},
dataSrc: function (json) {
return json.data;
},
error: function (xhr, error, code) {
console.error('Ajax request failed:', xhr, error, code);
alert('데이터를 불러오는 중 문제가 발생했습니다.');
}
},
columns: dynamicColumns,
dom: 'rt<"bottom"i<"dataTables_paginate"p>><"clear">', // 페이징 컨트롤을 기존 위치에서 제거하고 새로운 위치에 추가
pageLength: 10,
lengthMenu: [10, 25, 50, 100],
language: {
paginate: {
first: '<<',
last: '>>',
next: '>',
previous: '<'
},
lengthMenu: 'Show _MENU_ entries'
},
drawCallback: function (settings) {
console.log("drawCallback called, settings:", settings); // 디버깅 로그
// 초기화 단계와 데이터 로드 단계 구분
if (settings.iDraw === 1) {
console.log("Initial draw");
// 초기화 단계에서만 페이징 컨트롤을 이동
var existingPaginate = $(pagingId).find('.dataTables_paginate');
if (existingPaginate.length > 0) {
existingPaginate.remove();
console.log("Existing paginate removed in drawCallback");
}
var paginate = $('.dataTables_paginate');
console.log("drawCallback paginate:", paginate.html()); // 디버깅 로그
if (paginate.length > 0 && paginate.html().trim() !== '') {
$(pagingId).append(paginate);
console.log("Paging controls appended in drawCallback");
} else {
console.error('Paging controls not found or empty in drawCallback');
}
} else {
console.log("Redraw");
// Redraw 단계에서는 페이징 컨트롤을 이동시키지 않음
}
}
});
...
}
결과
![]() |
![]() |
728x90
반응형
LIST