개발노트/jqGrid
[jqGrid] 이벤트 핸들링 - ready, loadComplete, onSelectRow, change
dev-mylee
2025. 1. 2. 09:56
1. 페이지 로드 시 초기 이벤트 설정
$(document).ready(function ($) {
// 날짜 선택기 초기화
$("#startDate").datepicker();
$("#endDate").datepicker();
// 버튼 초기 상태 설정
$('#editBtn').prop("disabled", true);
$('#printBtn').prop("disabled", true);
// 검색 버튼 클릭 이벤트
$('#searchBtn').click(function (e) {
$("#currentPage").val(1);
searchData();
e.preventDefault();
});
// 그리드 반응형 처리
$(window).bind('resize', function () {
$('#mainGrid').setGridWidth($('#gridContainer').width());
var height = $(window).height() - $('#gridContainer')[0].offsetTop;
if (height > 275)
$('#mainGrid').setGridHeight(height - 142);
}).trigger('resize');
});
2. 그리드 데이터 로드 완료 이벤트
loadComplete: function() {
// 빈 데이터 처리
if ($(this).getGridParam("records")==0) {
var message = '검색 결과가 없습니다.';
$(this).addRowData("emptyRow", message);
}
// 각 행 데이터 처리
var rows = jQuery("#mainGrid").jqGrid('getDataIDs');
for(var i = 0; i < rows.length; i++){
var rowId = rows[i];
var rowData = jQuery("#mainGrid").getRowData(rows[i]);
// 상태값에 따른 스타일 적용
if(rowData.status == 'PENDING') {
$("#mainGrid").jqGrid('setRowData', rowId, false, { color: 'gray'});
}
}
}
3. 행 선택 이벤트
onSelectRow : function(rowId, status, e) {
// 기본 버튼 상태
$('#editBtn').prop("disabled", true);
if (rowId == 'emptyRow') return;
var rowData = $(this).getRowData(rowId);
// 조건에 따른 버튼 활성화
if(rowData.type == 'NORMAL' && rowData.quantity > 0)
$('#printBtn').prop("disabled", false);
else
$('#printBtn').prop("disabled", true);
// 선택된 데이터 저장
$('#selectedId').val(rowData.id);
$('#selectedName').val(rowData.name);
}
4. 체크박스 관련 이벤트
// 전체 선택 체크박스
$('#selectAll').change(function(){
var isChecked = $(this).prop("checked");
$('input:checkbox[name="itemCheck"]').prop("checked", isChecked);
});
// 개별 체크박스
$(document).on('change', '.itemCheckbox', function(){
var allChecked = true;
$('input:checkbox[name="itemCheck"]').each(function() {
if(!this.checked) allChecked = false;
});
$("#selectAll").prop("checked", allChecked);
});
✅ 메모
각 이벤트가 언제 발생하고 어떤 처리를 하는지 파악하는 게 중요하다. 특히 아래 사항들을 주의깊게 봐야한다:
- 문서 로딩 시 초기화 작업
- 데이터 로드 완료 후의 추가 처리
- 행 선택 시의 UI 업데이트
- 체크박스 동작 로직
이런 이벤트들이 모여서 그리드의 완성도 높은 사용자 경험을 만들어낸다. 🤓