Modal is not shown in materialize (Omdb API)

0

I am using omdb api, it turns out that when I click on the link already created in the first request, it does not show me the modal for each movie (id) in specific.

$(document).ready(() => {
    $('.modal').modal();
    const API_KEY = '98430029';
    const btnSearch = $('#btn-search');

    btnSearch.on('click', (e) => {
        e.preventDefault();

        const input = $('#search').val();
          getMovies(input);
            
   })


    function getMovies(movie){

        axios.get('http://www.omdbapi.com/?apikey=${API_KEY}&s=${movie}')
            .then(response => {
                const movies = response.data.Search;
                let template = '';

                $.each(movies, (i, info) => {

                    template += '
                    <div class="col s12 m4">
                        <div class="card">
                            <div class="card-image">
                                <img class="card-image" src="${info.Poster === 'N/A' ? '': info.Poster}">
                                <h5 class="card-content">${info.Title}</h5>
                                <a data-id="${info.imdbID}" href="#modal1"
                                    class="detail btn modal-trigger btn-floating halfway-fab waves-effect waves-light red">
                                    <i class="material-icons">more</i>
                                </a>
                            </div>
                        </div>
                    </div>
                    ';
                })

                $('#content').html(template);

                $(".detail").on('click',() => {
                    let id = $(this).attr("data-id");
                    getDetails(id);
                });

            })
            .catch(err => console.log(err))
    }

    function getDetails(id) {

        axios.get('http://www.omdbapi.com/?apikey=${API_KEY}&i=${id}')
        .then(response => {
            const info = response.data;

            //Esto no me muestra al hacer click
            let template ='
                    <div id="modal1" class="modal modal-fixed-footer">
                        <div class="modal-content">
                            <h4>${info.Title}</h4>
                            <p>${info.Plot}</p>
                        </div>
                        <div class="modal-footer">
                            <a href="#!" class="modal-close waves-effect waves-green btn-flat">Cerrar</a>
                        </div>
                    </div>    
                   ';
            $("#modal-detail").html(template);
        })
        .catch(err => console.log(err))
    }
})
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Buscador de Peliculas</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!--Import Google Icon Font-->
      <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <!-- Compiled and minified CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
    <link rel="stylesheet" href="css/custom.css">
</head>

<body>
    
    <div class="container">
        <h1 class="center-align">Encuentra tu película</h1>
        <form class="center-align" id="form">
            <div class="input-field col s12">
                <input type="text" id="search" placeholder="Nombre de tu película">
            </div>
            <a class="waves-effect waves-light btn" id="btn-search" style="margin-bottom: 30px">Buscar</a>
        </form>
        <div class="red-text text-darken-2 left-align" id="error"></div>  
        
    </div>
    
    <div class="container">
        <div id="content" class="row"></div>   
    </div>
    <div id="modal-detail"></div>

<!-- Compiled and minified JavaScript -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="js/app.js"></script>

</body>
</html>
    
asked by Jeremías 01.10.2018 в 09:44
source

1 answer

0

Try to do a test with setInterval , to rule out problems with the creation of the DOM of your answer.

setInterval(function(){

const info = response.data;
 let template ='
  <div id="modal1" class="modal modal-fixed-footer">
   <div class="modal-content">
    <h4>${info.Title}</h4>
    <p>${info.Plot}</p>
   </div>
   <div class="modal-footer">
    <a href="#!" class="modal-close waves-effect waves-green btn-flat">Cerrar</a>
   </div>
 </div>
 ';
 $("#modal-detail").html(template);

}, 500);
    
answered by 01.10.2018 в 15:25