새소식

반응형
250x250
My Study/Java

탭 기능 만들기

  • -
728x90
반응형

탭 기능 설명 및 사용법 가이드

1. 메인 JSP

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link rel="stylesheet" href="/resources/pweb/mdi/mdi.css">
    <link rel="stylesheet" type="text/css" href="/resources/pweb/clipreport5/css/clipreport5.css">
    <link rel="stylesheet" type="text/css" href="/resources/pweb/clipreport5/css/eform.css">
    <link rel="stylesheet" type="text/css" href="/resources/pweb/clipreport5/css/UserConfig5.css">
    <link rel="stylesheet" type="text/css" href="/resources/pweb/clipreport5/css/font.css">
    <script type='text/javascript' src='/resources/pweb/clipreport5/js/jquery-1.11.1.js'></script>
    <script type='text/javascript' src='/resources/pweb/clipreport5/js/clipreport5.js?ver=1.0'></script>
    <script type='text/javascript' src='/resources/pweb/clipreport5/js/UserConfig5.js'></script>
</head>
<body>
    <div class="tabs">
    </div>
    <div class="mdiWrapper">
        <div class="content">

        </div>
    </div>
    <script src="/resources/pweb/mdi/mdi.js"></script>
</body>
</html>

 

베이스가 될 JSP 코드

사용할 때에 temp.jsp에 js, css 모두 import 후 temp.jsp를 include 한 뒤 사용하는게 좋음.

2. 메인JS

2-1. tabFunc

const tabList = new Array();

const tabFunc = (target) => {
    let link = target.attr('id');
    let name = target.text();
    if(name == '로그관리') name = '목록조회';
        if(tabList.length < 8) {
            if(tabList.indexOf(name) == -1) {
                // report를 실행해야 하는 탭
                if(name == '서식뷰어') {
                    tabList.push(name);
                    makeTab(name);
                    makeReport(name, link);
                    $.ajax({
                        url: '/mdi/resultKey',
                        type: "POST",
                        success: function(response) {
                            report = createReport("/clip/reportServer", response, document.getElementsByClassName(name + 'Div')[0]);
                            report.setStyle("close_button", "display:none");
                            report.view();
                        }
                    });
                } else {
                    tabList.push(name);
                    makeTab(name);
                    makeContent(name, link);
                }
            } else {
                $('.allTabs').removeClass('active');
                $('.allDiv').css('display', 'none');
                $('.' + name + 'Div').css('display', 'block');
                $('.' + name).addClass('active');
            }
        } else {
            alert('탭의 최대 개수는 8개 입니다. 사용하시지 않는 탭은 닫아주시길 바랍니다.');
        }
}

 

메뉴를 클릭했을 때 실행되는 함수.

탭의 개수가 8개가 초과하는지 판단에 따라 실행하는 로직이 다름.

또한 report를 띄워야 하는 메뉴에서는 report 함수를 실행할 ajax를 실행.

 

2-2. makeContent, makeReport

const makeContent = (name, link) => {
    $('.allDiv').css('display', 'none');
    let content = "<div class='allDiv "+ (name + 'Div') +"'></div>";
    $('.content').append(content);
    $('.' + name + 'Div').load('http://localhost:8080' + link);
}

const makeReport = (name, link) => {
    $('.allDiv').css('display', 'none');
    let content = "<div class='allDiv "+ (name + 'Div') +"'></div>";
    $('.content').append(content);
}

 

 

메뉴를 눌렀을 때 content 또는 report를 화면에 보여줌.

탭을 눌렀을 때 설정된 div 안쪽에 load하는 방식을 사용함.

 

2-3. makeTap, moveTab

const makeTab = (name) => {
    let tab = "<div class=\"" + name + " allTabs\"><div class='clickTab' onclick='moveTab($(this))'>" + name + "</div>" +
                    "<div class='btnDiv'><button onclick='closeBtn($(this))'>X</button></div>" +
                    "</div>";
    let content = "<div class='conDetail " + name + "content'></div>"
    $('.content').append(content);
    $('.tabs').append(tab);
    $('.allTabs').removeClass('active');
    $('.' + name).addClass('active');
    $('.allDiv').css('display', 'none');
    $('.' + name + 'Div').css('display', 'block');
}

const moveTab = (target) => {
    let name = target.text();
    $('.allTabs').removeClass('active');
    $('.' + name).addClass('active');
    $('.allDiv').css('display', 'none');
    $('.' + name + 'Div').css('display', 'block');
}

 

makeTap → 메뉴 클릭 시 탭을 만들기 위한 함수

moveTab → 탭 클릭 시 탭 화면으로 이동하는 함수

 

2-4. closeBtn

const closeBtn = (btn) => {
    let num = btn.parent().parent().attr('class').indexOf(' ');
    let tab = btn.parent().parent().attr('class').substring(0, num);
    if(tab == '로그관리') tab = '목록조회';
    console.log(tab);
    $('.' + tab).remove();
    $('.' + tab).removeClass('active');
    $('.' + tab + 'Div').css('display', 'none');
    let index = tabList.indexOf(tab);
    tabList.splice(index, 1);
    active(tab);
}

 

탭 닫기 버튼을 눌렀을 때 실행되는 함수

현재 닫기를 누른 탭과 내용을 화면에서 지움

 

2-5. active

const active = (name) => {
    if($('.active').length != 0) {

    } else {
        $('.' + tabList[tabList.length - 1]).addClass('active');
        $('.' + tabList[tabList.length - 1] + 'Div').css('display', 'block');
    }
}

 

현재 활성화 된 탭 감지 및 활성화 된 탭 변경

 

3. 탭 클릭 시 보여줄 JSP들

탭 내에서 ajax를 쏠 때 url을 설정하기 전 현재 페이지에서 url을 가져와서 사용하는게 아닌 보내줘야 할 url을 정확히 입력함

ex)

function deleteList() {
    
       var url = "/code/deleteMulti";
       var tableId = "code";
       var pkId = "codeId";

       comm.ajax.deleteList(url, tableId, pkId);

}

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.