javascript form 요소를 이용해서 상품 구매 페이지 만들기
<div class="form">
<div class="left">
<h3>선택내역</h3>
<div id="container">
</div>
</div>
<div class="right">
<div class="select">
<h3>
분류
</h3>
<div>
<select id="selGoods" name="selGoods"></select>
<button id="btnAddGoods">추가하기</button>
</div>
</div>
<div>
<h3>
합계
</h3>
<input id="goodsTotAmt" name="totAmt" value="0">
</div>
</div>
</div>
<input type="button" value="구매하기" class="button2" onClick="alert('해당페이지는 포트폴리오 페이지로 구매할 수 없습니다.')">
</div>
✅html
1) 왼쪽에 선택목록이 나타나기 위한 빈 div만들기
2) 오른쪽에는 선택할 수 있는 select form과 추가하기 버튼 작성
3) 합계를 보여주기 위해 input으로 작성
4) 가장하단에는 구매하기 button을 작성
function Goods(){
this.arrAllGoods = new Array();//상품 목록
this.arrSelGoods = new Array();//선택한 상품 목록
var p = this;
//상품 추가 시
this.select = function (trgtGoodsId){
var selectedIndex = -1;
//전체 목록 배열에서 검색하여 goodsId가 없다면 선택 목록에 push후 container안에 그려준다.
//선택 목록에서 검색
for(var i=0;i<p.arrSelGoods.length;i++){
if(p.arrSelGoods[i].goodsId==trgtGoodsId){
selectedIndex = i;
break;
}
}
if(selectedIndex<0){//선택목록에 없을 경우 추가. 잇을경우 얼럿.
//전체목록에서 선택 추가해줌.
for(var j=0;j<p.arrAllGoods.length;j++){
if(p.arrAllGoods[j].goodsId==trgtGoodsId){
p.arrSelGoods.push(p.arrAllGoods[j]);
p.arrSelGoods[p.arrSelGoods.length-1].cnt = 0;//무조건 개수 초기화
p.appendChoiceDiv(p.arrAllGoods[j]);
break;
}
}
}else{
alert("이미 추가한 상품입니다.");
}
p.afterProc();
}
//상품 제거 시
this.deselect = function (trgtGoodsId){
var selectedIndex = -1;
//배열에서 검색.
for(var i=0;i<p.arrSelGoods.length;i++){
if(p.arrSelGoods[i].goodsId==trgtGoodsId){
p.removeChoiceDiv(p.arrSelGoods[i]);
p.arrSelGoods.splice(i,1);
break;
}
}
p.afterProc();
}
this.appendChoiceDiv = function(prmtObj){
var innerHtml = "";
innerHtml += '<div id="div_'+prmtObj.goodsId+'">';
innerHtml += '<ul>';
innerHtml += ' <li>'+prmtObj.goodsNm+'</li>';
innerHtml += ' <li>수량:<input type="text" id="input_cnt_'+prmtObj.goodsId+'" name="" value="0"/>'
innerHtml += ' <li><button type="button" id="" class="add" name="" onclick="goods.minus(\''+prmtObj.goodsId+'\');">-</button></li>';
innerHtml += ' <li><button type="button" id="" class="remove" name="" onclick="goods.plus(\''+prmtObj.goodsId+'\');">+</button></li>';
innerHtml += ' <li><button type="button" id="" class="remove" name="" onclick="goods.deselect(\''+prmtObj.goodsId+'\');">제거</button></li>';
innerHtml += ' <li>가격:<input type="text" id="input_sumAmt_'+prmtObj.goodsId+'" name="" value="0"/><span> 원</span>'
innerHtml += '</ul>';
innerHtml += '</div>';
$('#container').append(innerHtml);
}
this.removeChoiceDiv = function(prmtObj){
$("#div_"+prmtObj.goodsId).remove();
}
this.plus = function (trgtGoodsId){
for(var i=0;i<p.arrSelGoods.length;i++){
if(p.arrSelGoods[i].goodsId==trgtGoodsId){
p.arrSelGoods[i].cnt++;
break;
}
}
p.afterProc();
}
this.minus = function (trgtGoodsId){
for(var i=0;i<p.arrSelGoods.length;i++){
if(p.arrSelGoods[i].goodsId==trgtGoodsId){
if(p.arrSelGoods[i].cnt==0) break;
p.arrSelGoods[i].cnt--;
break;
}
}
p.afterProc();
}
//계산 후처리.
this.afterProc = function (){
for(var i=0;i<p.arrSelGoods.length;i++){
$('#input_cnt_'+p.arrSelGoods[i].goodsId).val(p.arrSelGoods[i].cnt);
$('#input_sumAmt_'+p.arrSelGoods[i].goodsId).val(p.arrSelGoods[i].cnt*p.arrSelGoods[i].goodsUnprc);
}
var goodsTotAmt = 0;
for(var i=0;i<p.arrSelGoods.length;i++){
goodsTotAmt += p.arrSelGoods[i].cnt*p.arrSelGoods[i].goodsUnprc;
}
$('#goodsTotAmt').val(goodsTotAmt + ' 원');
}
}
var goods = new Goods();
//jstl로 전체 상품 목록 미리 세팅
goods.arrAllGoods.push({goodsId:"1",goodsUnprc:20000,goodsNm:"성인" ,cnt:0});
goods.arrAllGoods.push({goodsId:"2",goodsUnprc:15000,goodsNm:"청소년" ,cnt:0});
goods.arrAllGoods.push({goodsId:"3",goodsUnprc:13000,goodsNm:"어린이",cnt:0});
//jstl로 셀렉트 박스 옵션 채우기
$('#selGoods').append('<option id="" value="1">성인</option>');
$('#selGoods').append('<option id="" value="2">청소년</option>');
$('#selGoods').append('<option id="" value="3">어린이</option>');
$('#btnAddGoods').on('click',function(){
goods.select($('#selGoods option:selected').val());
});
✅css
1) 상품과 선택 상품에 대해 배열을 만든다
2) 전체 목록 배열에서 goodsId가 없으면 선택목록에 추가, 있으면 추가되지않고 alert이 띄워지는 함수작성
3) html 추가하는 함수 작성
- 선택된 목록 이름 추가
- ul li 태그로 수량, +버튼, -버튼, 목록제거버튼, 해당목록 가격 작성
4) 해당 태그 id를 불러와 +버튼, -버튼, 목록제거버튼에 대한 함수작성
5) 계산 이후 전체 합계에 대한 함수 작성
-해당 input id를 불러와 결과값을 해당 id로 추출
6) 선택 목록 세팅
- 상품명, 가격등 작성
7) 셀렉트 박스 옵션 세팅
✔ 구글링을 통해 form 요소 작성 (스크립트 너무 어렵다..)
✔ 해당 html, script와 따로작성한 css로 이미지 결과 도출
'Coding > javascript' 카테고리의 다른 글
[css/jquery] span을 이용하여 x자로 바뀌는 햄버거 버튼 만들기 (0) | 2022.06.15 |
---|---|
[jquery/css] 모바일 햄버거버튼 만들기 (0) | 2022.06.15 |
[jquery] 스크롤이 내려가면(슬라이드가 끝나면) fixed된 버튼이 사라짐 (0) | 2022.06.15 |
[jquery] 버튼 클릭 시 원하는 스크롤 위치로 이동하기 (0) | 2022.06.15 |
[JavaScript] 로그인창 미입력시 경고문구 뜨게하기 (0) | 2022.05.19 |