순서
1. <span> 태그 추가
2. 변수 선언
3. 각 항목 확인
4. 최종 확인
1. <span>태그 추가
공란 시 경고글 역할을 할 <span> 태그를 추가합니다.
위치는 class 속성 값이 'input-box'인 각각의 <div> 태그 내부 제일 마지막 공간입니다.
각 <span>태그의 속성명에는 공통적으로 적용될 'ck_warn' 값과 각 <span> 태그를 구분해줄 '항목명_wanr"값을 추가했습니다.
<span class="ck_warn productName_warn">상품 명을 입력해주세요.</span>
<span class="ck_warn productPrice_warn">상품 가격을 입력해주세요.</span>
<span class="ck_warn productStock_warn">상품 재고를 입력해주세요.</span>
<span class="ck_warn productIntro_warn">상품 소개를 입력해주세요.</span>
<span class="ck_warn cateCode_warn">카테고리를 선택해주세요.</span>
"adminProduct.css" 파일에 추가한 <span> 태그에 대한 css 설정 코드를 추가합니다.
.ck_warn{ /* 입력란 공란 경고 태그 */
display: none;
padding-top: 10px;
text-align: center;
color: #e05757;
font-weight: 300;
}
2. 변수 선언
'상품 등록' 동작 JavaScript 메서드에 2가지의 변수를 선언해줍니다.
첫 번째 변수는 각 항목의 통과 여부를 의미하는 변수입니다.
해당 변수를 '체크 변수'라고 하겠습니다.
/* 체크 변수 */
let productNameCk = false;
let cateCodeCk = false;
let priceCk = false;
let stockCk = false;
let introCk = false;
두 번째 변수는 각 항목의 <input> 태그에 쉽게 접근하기 위해 변수를 선언 및 초기화했습니다.
/* 체크 대상 변수 */
let productName = $("input[name='product_title']").val();
let cateCode = $("select[name='kind_id']").val();
let productPrice = $("input[name='product_price']").val();
let productStock = $("input[name='product_stock']").val();
let productIntro = $(".bit p").html();
3. 각 항목 확인
각 항목을 빈 공란인지 확인하는 if문을 코드를 작성합니다.
해당 if문은 공란일 경우 <span> 태그를 보이도록하고 '체크 변수'에 false값을 대입합니다.
공란이 아닐경우 <span> 태그를 숨기고 '체크 변수'에 true 값을 대입합니다.
if(productName){
$(".productName_warn").css('display','none');
productNameCk = true;
} else {
$(".productName_warn").css('display','block');
productNameCk = false;
}
if(cateCode != 'none'){
$(".cateCode_warn").css('display','none');
cateCodeCk = true;
} else {
$(".cateCode_warn").css('display','block');
cateCodeCk = false;
}
if(productPrice != 0){
$(".productPrice_warn").css('display','none');
priceCk = true;
} else {
$(".productPrice_warn").css('display','block');
priceCk = false;
}
if(productStock != 0){
$(".productStock_warn").css('display','none');
stockCk = true;
} else {
$(".productStock_warn").css('display','block');
stockCk = false;
}
if(productIntro != '<br data-cke-filler="true">'){
$(".productIntro_warn").css('display','none');
introCk = true;
} else {
$(".productIntro_warn").css('display','block');
introCk = false;
}
4. 최종 확인
앞의 if문들을 통해서 각 항목의 상태에 따라 '체크 변수' 값들이 대입되어 있습니다.
해당 '체크 변수'들이 모두 true일 때 <form> 태그를 전송하는 코드가 동작하고, 한 항목이라도 false일시 '상품 등록' 버튼 메서드가 종료되도록 아래의 코드를 추가합니다.
if(productNameCk && cateCodeCk && priceCk && stockCk && introCk){
//alert('통과');
enrollForm.submit();
} else {
return false;
}
insertProduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="//code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" />
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
<meta charset="UTF-8">
<link href='https://unpkg.com/boxicons@2.0.7/css/boxicons.min.css' rel='stylesheet'>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.8.18/jquery-ui.min.js"></script>
<title>Admin</title>
<link href="${path}/resources/css/admin_css.css" rel="stylesheet"/>
<link href="${path}/resources/css/adminProduct.css" rel="stylesheet"/>
</head>
<body>
<div class="sidebar">
<div class="logo-details">
<i class='bx bxl-c-plus-plus'></i> <span class="logo_name">SWAN</span>
</div>
<ul class="nav-links">
<li><a href="/swan"> <i class='bx bx-grid-alt'></i> <span
class="links_name">HOME</span>
</a></li>
<li><a href="/admin/admin"> <i class='bx bx-box'></i> <span
class="links_name">상품 관리</span>
</a></li>
<li><a href="/admin/orderList"> <i class='bx bx-list-ul'></i>
<span class="links_name">주문 관리</span>
</a></li>
<li><a href="/admin/adminMember"> <i
class='bx bx-pie-chart-alt-2'></i> <span class="links_name">회원
관리</span>
</a></li>
<li><a href="/admin/adminQuestion"> <i
class='bx bx-coin-stack'></i> <span class="links_name">문의사항
관리</span>
</a></li>
<li class="log_out"><a href="/member/logout.me"> <i
class='bx bx-log-out'></i> <span class="links_name">로그아웃</span>
</a></li>
</ul>
</div>
<section class="home-section">
<nav>
<div class="sidebar-button">
<i class='bx bx-menu sidebarBtn'></i> <span class="dashboard">상품
등록</span>
</div>
</nav>
<form action="/admin/insertProduct" method="post" id="enrollForm">
<div class="home-content">
<div class="recent-sales box">
<div class="container">
<div class="content">
<div class="user-details">
<div class="input-box">
<span class="details">상품 명</span> <input type="text"
placeholder="Product's name" name="product_title" required>
<span class="ck_warn productName_warn">상품 명을 입력해주세요.</span>
</div>
<div class="input-box">
<span class="details">상품 가격</span> <input type="text"
placeholder="Product's price" name="product_price" required>
<span class="ck_warn productPrice_warn">상품 가격을 입력해주세요.</span>
</div>
<div class="input-box">
<span class="details">상품 재고</span> <input type="text"
placeholder="Product's stock" name="product_stock" required>
<span class="ck_warn productStock_warn">상품 재고를 입력해주세요.</span>
</div>
</div>
<div class="input-box bit">
<span class="details">상품 설명</span>
<textarea placeholder="About Product" name="product_content"
required></textarea>
<span class="ck_warn productIntro_warn">상품 소개를 입력해주세요.</span>
</div>
<div>
<input type="file" class="upload-name" value="첨부파일" id ="fileItem"
placeholder="첨부파일" name="uploadFile">
<div id="uploadResult">
<!--
<div id="result_card">
<div class="imgDeleteBtn">x</div>
<img src="/display?fileName=test.png">
</div>
-->
</div>
</div>
<br>
<div class="form_section">
<div class="input-box bit">
<span class="details">상품 카테고리</span>
</div>
<div class="form_section_content">
<div class="cate_wrap">
<span>대분류</span>
<select class="cate1">
<option selected value="none">선택</option>
</select>
</div>
<div class="cate_wrap">
<span>중분류</span>
<select class="cate2" name="kind_id">
<option selected value="none">선택</option>
</select>
</div>
<span class="ck_warn cateCode_warn">카테고리를 선택해주세요.</span>
</div>
</div>
<div class="button">
<input type="button" value="취소" id="cancelBtn" />
<input type="button" value="상품 등록" id="enrollBtn" />
</div>
</div>
</div>
</div>
</div>
</form>
</section>
<script>
/* $(document).ready(function(){
console.log('${cateList}');
}); */
let enrollForm = $("#enrollForm")
/* 상품 등록 버튼 */
$("#enrollBtn").on("click", function(e) {
e.preventDefault();
/* 체크 변수 */
let productNameCk = false;
let cateCodeCk = false;
let priceCk = false;
let stockCk = false;
let introCk = false;
/* 체크 대상 변수 */
let productName = $("input[name='product_title']").val();
let cateCode = $("select[name='kind_id']").val();
let productPrice = $("input[name='product_price']").val();
let productStock = $("input[name='product_stock']").val();
let productIntro = $(".bit p").html();
if(productName){
$(".productName_warn").css('display','none');
productNameCk = true;
} else {
$(".productName_warn").css('display','block');
productNameCk = false;
}
if(cateCode != 'none'){
$(".cateCode_warn").css('display','none');
cateCodeCk = true;
} else {
$(".cateCode_warn").css('display','block');
cateCodeCk = false;
}
if(productPrice != 0){
$(".productPrice_warn").css('display','none');
priceCk = true;
} else {
$(".productPrice_warn").css('display','block');
priceCk = false;
}
if(productStock != 0){
$(".productStock_warn").css('display','none');
stockCk = true;
} else {
$(".productStock_warn").css('display','block');
stockCk = false;
}
if(productIntro != '<br data-cke-filler="true">'){
$(".productIntro_warn").css('display','none');
introCk = true;
} else {
$(".productIntro_warn").css('display','block');
introCk = false;
}
if(productNameCk && cateCodeCk && priceCk && stockCk && introCk){
//alert('통과');
enrollForm.submit();
} else {
return false;
}
});
/* 카테고리 */
let cateList = JSON.parse('${cateList}');
let cate1Array = new Array();
let cate2Array = new Array();
let cate1Obj = new Object();
let cate2Obj = new Object();
let cateSelect1 = $(".cate1");
let cateSelect2 = $(".cate2");
/* 카테고리 배열 초기화 메서드 */
function makeCateArray(obj,array,cateList, tier){
for(let i = 0; i < cateList.length; i++){
if(cateList[i].tier === tier){
obj = new Object();
obj.kind_name = cateList[i].kind_name;
obj.kind_id = cateList[i].kind_id;
obj.cateparent = cateList[i].cateparent;
array.push(obj);
}
}
}
/* 배열 초기화 */
makeCateArray(cate1Obj,cate1Array,cateList,1);
makeCateArray(cate2Obj,cate2Array,cateList,2);
$(document).ready(function(){
console.log(cate1Array);
console.log(cate2Array);
});
/* 대분류 <option> 태그 */
for(let i = 0; i < cate1Array.length; i++){
cateSelect1.append("<option value='"+cate1Array[i].kind_id+"'>" + cate1Array[i].kind_name + "</option>");
}
/* 중분류 <option> 태그 */
/*
대분류 선택 값 가져오기
=> 중분류 <option> 태그 모두 지우기
=> 중분류 기본 <option> 태그 추가
=> 대분류 선택 값과 일치하는 'cateparent'값을 가진 중분류 <option> 태그 출력
*/
$(cateSelect1).on("change",function(){
/* 대분류 선택 값을 가져오는 코드를 추가 */
let selectVal1 = $(this).find("option:selected").val();
/* 중분류 <option> 태그를 지우고 기본적인 <option> 태그를 추가하는 코드 */
cateSelect2.children().remove();
/* 대분류 선택 값과 일치하는 'cateparent'값을 가진 중분류 <option> 태그를 출력하는 코드 */
cateSelect2.append("<option value='none'>선택</option>");
for(let i = 0; i < cate2Array.length; i++){
if(selectVal1 === cate2Array[i].cateparent){
cateSelect2.append("<option value='"+cate2Array[i].kind_id+"'>" + cate2Array[i].kind_name + "</option>");
}
}// for
});
</script>
<script>
let sidebar = document.querySelector(".sidebar");
let sidebarBtn = document.querySelector(".sidebarBtn");
sidebarBtn.onclick = function() {
sidebar.classList.toggle("active");
if (sidebar.classList.contains("active")) {
sidebarBtn.classList.replace("bx-menu", "bx-menu-alt-right");
} else
sidebarBtn.classList.replace("bx-menu-alt-right", "bx-menu");
};
$("#file").on('change', function() {
var fileName = $("#file").val();
$(".upload-name").val(fileName);
});
</script>
</body>
</html>
유효성 검사 코드들이 정상적으로 동작하는지 테스트합니다.
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[21] 상품 조회 기능 구현(1) (0) | 2022.08.04 |
---|---|
STS3 쇼핑몰 프로젝트[20] 상품 목록 기능 구현 (0) | 2022.08.04 |
STS3 쇼핑몰 프로젝트[18] 상품 등록 - 카테고리 리스트 구현(3) (0) | 2022.08.04 |
STS3 쇼핑몰 프로젝트[18] 상품 등록 - 카테고리 리스트 구현(2) (0) | 2022.08.04 |
STS3 쇼핑몰 프로젝트[18] 상품 등록 - 카테고리 리스트 구현(1) (0) | 2022.08.03 |