Skip to content

Modal in array loop in JS

I’m working on my e-commerce project. Here is something am struggling to figure it out… [1]: https://i.stack.imgur.com/hb4e8.png Refer to image attached – I want if click on i icon > a modal should open.

snip codes

const products = [
    {
        id: 1,
        title: 'Pens',
        img: '/assets/images/Stationery Items/d-pens.jpg',
        description: 'Pens',
        rate: 4.2,
    },
    {
        id: 2,
        title: 'Notebooks',
        img: '/assets/images/Stationery Items/d-notebooks.jpg',
        description: 'Notebooks',
        rate: 3.4,
    },
  {...}
  ]


function showProduct(product) {
    return `
        
            <div class="box-wrap border">
                <img src="${product.img}" class="rounded d-block">
                <div class="body">
                    <h5>${product.title}</h5>
                    <div class="d-flex justify-content-between">
                        <a href="#"><i class="fas fa-star"></i></a>
                        <a href="#"><i class="fas fa-info"></i></a>
                    </div>  
                </div>
            </div>
            
            
        
        `
}

function productList() {
    document.getElementById('products').innerHTML = `
            <div class="owl-carousel">
                ${products.map(showProduct).join('')}
            </div>
        `
}

Answer

You can use bootstrap with modal:

const products = [
    {
        id: 1,
        title: 'Pens',
        img: '/assets/images/Stationery Items/d-pens.jpg',
        description: 'Pens',
        rate: 4.2,
    },
    {
        id: 2,
        title: 'Notebooks',
        img: '/assets/images/Stationery Items/d-notebooks.jpg',
        description: 'Notebooks',
        rate: 3.4,
    },
 ];
 
products.map((v, k) => {
    $('#sliders').append('<button type="button" class="btn btn-primary openModal" data-key="'+ k +'">'+ v.title +'</button>')
})

$(document).on('click', 'button.openModal', function () {
    var productKey = $(this).data('key');
  var product = products[productKey];
  if(product){
    $('#exampleModal').modal('toggle');
    $('#exampleModal #exampleModalLabel').html(product.title);
    var content = '<div>Title: '+ product.title + '</div><div>Description: ' + product.description+'</div><div>Rate: '+product.rate+'</div>';
    $('#exampleModal .modal-body').html(content);
  }
})
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet"/>
</head>
<body >
    <!-- Button trigger modal -->
<div id="sliders"></div>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body"></div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
</body>
</html>