자바스크립트

자바스크립트> 데이터바인딩 & 더보기

연습노트 2024. 8. 26. 16:05

https://hjw1191.github.io/data//data.json(데이터주소)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <div id="product-cards" class="row"></div>  
       
        <div class="container mt-3">
            <button class="btn btn-danger" id="filter">6만원이하</button>
            <button class="btn btn-danger sort">가격순</button>
            <button class="btn btn-danger" id="more">더보기</button>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
          var products = []; // 제품 배열 초기화
          var allData = []; // 모든 데이터를 저장할 배열

        function 상품목록(productArray) {
            var cardGroup = document.getElementById('product-cards');
       
            productArray.forEach(product => {
                var card = document.createElement('div');
                card.className = 'col-4 mb-4';  // 카드가 3열로 배치되도록 설정
                card.innerHTML = `
                    <div class="card h-100">
                        <img src="https://via.placeholder.com/600" class="card-img-top">
                        <div class="card-body">
                            <h5 class="card-title" id='cardtitle'>${product.title}</h5>
                            <p class="card-text">상품명: ${product.title}</p>
                            <p class="card-text">가격: ${product.price}원</p>
                            <button class="btn btn-danger buy">구매하기</button>
                        </div>
                    </div>
                `;
                cardGroup.appendChild(card);
            });
        }

        // 초기 제품 카드 생성
        var clickCount = 0;

        function 데이터() {
            .done((data) => {
                allData = data; // 모든 데이터를 저장
                초기제품(); // 첫 번째 데이터 배치를 로드
            });
        }

        function 초기제품() {
            var start = clickCount * 3;
            var end = start + 3;
            var currentBatch = allData.slice(start, end);
               
                if (currentBatch.length > 0) {
                    상품목록(currentBatch);
                    clickCount++;
                }

                if (clickCount >= 3) {
                    $('#more').hide();  // 더 이상 불러올 데이터가 없으면 버튼 숨기기
                }
            }

        // 초기 데이터 로드
        데이터();

        $('#more').click(function(){
            초기제품();
        });
     
        $(".sort").click(function(){
            $('#product-cards').html('') // 내용초기화
            allData.sort(function(a,b){
                return a.price-b.price;
            });
            상품목록(allData.slice(0, clickCount * 3));
        })
       
     

        $('#filter').click(function(){
             
        var newProduct = allData.filter(function(a){
            return a.price <= 60000
        });
        $('#product-cards').html('');
        상품목록(newProduct.slice(0, clickCount * 3));
        });


            $(document).on('click', '.buy', function() {
        var productTitle = $(this).siblings('h5').text();
        localStorage.setItem(productTitle, productTitle);
        console.log(productTitle);
});
    </script>
</body>
</html>

 

구매하기 > 

로컬저장 

 

  • $('.buy').click(function(){ ... }): 코드가 실행되는 시점에 DOM에 있는 .buy 클래스를 가진 요소에만 이벤트를 바인딩합니다. 따라서 동적 요소에는 적용되지 않습니다.
  • $(document).on('click', '.buy', function(){ ... }): DOM 전체에 이벤트를 바인딩하고, 이벤트가 발생할 때 .buy 클래스를 가진 요소에 대해 이벤트를 처리합니다. 따라서 동적으로 생성된 요소에도 적용됩니다.