6 글 보임 - 1 에서 6 까지 (총 6 중에서)
-
글쓴이글
-
2023년 1월 25일 01:38 #64040
이순민참가자e.target.dataset.id를 출력했을때 담기버튼을 눌렀을땐 id가 console.log로 확인이 가능한데 dragstart에선 undefined가 뜹니다. let products = []; let cart = [];
$.get('./store.json').then(function (data) { products = data.products; // 상품 생성(json 파일 갯수만큼 추가) data.products.forEach((a, i) => { var 카드_템플릿 = ` <div class="col-sm-3"> <div class="item" draggable="true" data-id="${a.id}"> < img src="${data.products[i].photo}" style="width: 90%; height: auto;"> <h5>${data.products[i].title}</h5> <span>${data.products[i].brand}</span> <p>가격 : ${data.products[i].price}</p> <button class="add" data-id="${data.products[i].id}">담기</button> </div> </div>` $('.productLine').append(카드_템플릿); // console.log(data.products[i].id)
})
// 담기 버튼 눌렀을때 $('.add').click(function (e) { let productId = e.target.dataset.id; console.log(productId) let 몇번째 = cart.findIndex((a) => { return a.id == productId })
if (몇번째 == -1) { let 현재상품 = products.find((a) => { return a.id == productId }); 현재상품.count = 1; cart.push(현재상품); } else { cart[몇번째].count++; }
$('.basket-area').html(''); cart.forEach((a, i) => { var 카드_템플릿 = ` <div class="col-sm-3"> <div class="item" "draggable="true"> < img src="${a.photo}" style="width: 90%; height: auto;"> <h5>${a.title}</h5> <span>${a.brand}</span> <p>가격 : ${a.price}</p> <input type="number" value="${a.count}" class="item-count w-100"> </div> </div>`; $('.basket-area').append(카드_템플릿); }); })
//드래그 장바구니 추가 $('.item').on('dragstart', function(e){ let a = e.target.dataset.id; console.log(a) e.originalEvent.dataTransfer.setData('id', e.target.dataset.id) }); $('.basket-area').on('dragover', function (e) { e.preventDefault(); }); $('.basket-area').on('drop', function (e) { let productId = e.originalEvent.dataTransfer.getData('id'); console.log(productId) })
// 검색 기능 $(".input").on("keyup", function (e) { data.products.forEach((a, i) => { if (data.products[i].title.indexOf(e.target.value) != -1 || data.products[i].brand.indexOf(e.target.value) != -1) { let searchInput = e.target.value; let searchTitle = data.products[i].title; let searchTitle2 = searchTitle.replace(searchInput, `<span style="background : yellow">${searchInput}</span>`) $('.productLine').html(''); var 카드_템플릿 = ` <div class="col-sm-3"> <div class="item" "draggable="true"> < img src="${data.products[i].photo}" style="width: 90%; height: auto;"> <h5>${searchTitle}</h5> <span>${data.products[i].brand}</span> <p>가격 : ${data.products[i].price}</p> <button class="add" data-id="${a.id}">담기</button> </div> </div>`; $('.productLine').append(카드_템플릿); $('.col-sm-3 > h5').html(searchTitle2); } }) // 검색기능(입력값과 동일 한것이 없을때 기존의 상품목록 불러오기) if (e.target.value === "" || e.target.value === undefined) { $('.productLine').html(''); data.products.forEach((a, i) => { var 카드_템플릿 = ` <div class="col-sm-3"> <div class="item" "draggable="true" > < img src="${data.products[i].photo}" style="width: 90%; height: auto;"> <h5>${data.products[i].title}</h5> <span>${data.products[i].brand}</span> <p>가격 : ${data.products[i].price}</p> <button class="add" data-id="${a.id}">담기</button> </div> </div>`; $('.productLine').append(카드_템플릿); }) } }) })
2023년 1월 25일 15:17 #64115
이순민참가자센세 코드보고 코드 다이어트(리팩토링?)를 진행했기때문에 전체 코드를 다시 올리겠습니다.
let products = []; let cart = [];
$.get('./store.json').then(function (data) {
//원본데이터 다른데서 많이 쓰니까 변수에 보관 products = data.products;
// 상품 생성(json 파일 갯수만큼 추가) data.products.forEach((a, i) => { $('.productLine').append(` <div class="col-sm-3"> <div class="item" draggable="true" data-id="${a.id}"> < img src="${a.photo}" style="width: 90%; height: auto;" > <h5>${a.title}</h5> <span>${a.brand}</span> <p>가격 : ${a.price}</p> <button class="add" data-id="${a.id}">담기</button> <button class="test" data-id="${a.id}">test</button> </div> </div>`); });
// 담기 버튼 눌렀을때 $('.add').click(function (e) { //지금 누른 상품번호 let productId = e.target.dataset.id; console.log(productId)
// 담기버튼 누를 때 let cart = []에 상품을 {} 형태로 보관부터하고 //let cart에 상품이 이미 있는지 찾고 없으면 let cart에 {}추가, 있으면 수량만 추가; let 몇번째 = cart.findIndex((a) => { return a.id == productId }) if (몇번째 == -1) { let 현재상품 = products.find((a) => { return a.id == productId }); 현재상품.count = 1; cart.push(현재상품); } else { cart[몇번째].count++; }
//담기버튼 누를 때 마다 박스에 let cart 안에 있던 {} 갯수만큼 html 생성 $('.basket-area').html(''); cart.forEach((a, i) => { $('.basket-area').append(` <div class="col-sm-3"> < img src="${a.photo}" style="width: 90%; height: auto;"> <h5>${a.title}</h5> <span>${a.brand}</span> <p>가격 : ${a.price}</p> <input type="number" value="${a.count}" class="item-count w-100"> </div>`); });
}); //담기버튼 끝
//드래그 장바구니 추가 $('item').on('dragstart', function (e) { let a = e.target.dataset.id; console.log(a) e.originalEvent.dataTransfer.setData('id', e.target.dataset.id) }); $('.basket-area').on('dragover', function (e) { e.preventDefault(); }); $('.basket-area').on('drop', function (e) { let productId = e.originalEvent.dataTransfer.getData('id'); console.log(productId) }); }); // get then 끝;
// 검색 기능 $("#search").on("input", function (e) { let 검색어 = $('#search').val();
//지금입력한 글자가 제목에 있으면 let products에서 검색어있는 것만 남기기 let newProducts = products.filter((a) => { return a.title.includes(검색어) || a.brand.includes(검색어) });
$('.productLine').html(''); newProducts.forEach((a, i) => { $('.productLine').append(` <div class="col-sm-3"> < img src="${a.photo}" style="width: 90%; height: auto;"> <h5>${a.title}</h5> <span>${a.brand}</span> <p>가격 : ${a.price}</p> <button class="add" data-id="${a.id}">담기</button> </div>`) })
$('.col-sm-3 > h5').each(function (i, html요소) { let title = html요소.innerHTML; title = title.replace(검색어, `<span style="background : yellow">${검색어}</span>`)
html요소.innerHTML = title; }) })
2023년 1월 25일 16:33 #64136
이순민참가자센세 이렇게 코드를 추가해서 해결했습니다.. 괜찮은걸까요? ------------------변경전 ------------------------ //드래그 장바구니 추가 $('item').on('dragstart', function (e) { let a = e.target.dataset.id; console.log(a) e.originalEvent.dataTransfer.setData('id', e.target.dataset.id) }); $('.basket-area').on('dragover', function (e) { e.preventDefault(); }); $('.basket-area').on('drop', function (e) { let productId = e.originalEvent.dataTransfer.getData('id'); console.log(productId) }); ------------------변경전 ------------------------
-----------------------변경 후 ----------------------------------------- //장바구니 드래그 $('.item').on('dragstart', function (e) { e.originalEvent.dataTransfer.setData('id', e.target.dataset.id) let productId = e.target.dataset.id; let 몇번째 = cart.findIndex((a) => { return a.id == productId }) if (몇번째 == -1) { let 현재상품 = products.find((a) => { return a.id == productId }); 현재상품.count = 1; cart.push(현재상품); } else { cart[몇번째].count++; } }); $('.basket-area').on('dragover', function (e) { e.preventDefault(); }); $('.basket-area').on('drop', function (e) { let productId = e.originalEvent.dataTransfer.getData('id'); console.log(productId) $('.basket-area').html(''); cart.forEach((a, i) => { $('.basket-area').append(` <div class="col-sm-3"> < img src="${a.photo}" style="width: 90%; height: auto;"> <h5>${a.title}</h5> <span>${a.brand}</span> <p>가격 : ${a.price}</p> <input type="number" value="${a.count}" class="item-count w-100"> </div>`); }); });
}); // get then 끝; -----------------------변경 후 -----------------------------------------
2023년 1월 25일 16:49 #64143
codingapple키 마스터class="item" 붙은 html들 생성하는 코드 밑에 $('item').on('dragstart', 이거 복사해서 넣어줘도 될거같은데 잘되면 상관없습니다
-
글쓴이글
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
- 답변은 로그인 후 가능합니다.