невозможно добавить bootstrap popover из javascript в динамически созданные элементы - PullRequest
0 голосов
/ 29 апреля 2020

Я использую javascript для динамического создания массива карт в HTML, и в настоящее время я вставляю каждую кнопку карты, когда пользователь нажимает на эту кнопку, он должен видеть всплывающее окно, но до этого, Я извлекаю некоторые данные для размещения на карточках, но что-то не так или отсутствует, всплывающее окно не появляется, и если я прокомментировал первую строку loadPhotos (), он работает правильно.

$(function () {
    $('[data-toggle="popover"]').popover()
})

const getAllPhotos = async () => {
    let res = await fetch('https://jsonplaceholder.typicode.com/photos').then(
        response => { return response.json() }
    )
    return res;
}

const displayPhotos = (photos) => {
    const view = document.getElementById('photosGrid');
    photos.forEach(element => {
        view.append(element)

    });
}
const createCard = (data) => {
    const card = document.createElement('div');
    card.classList.add('card', 'col-lg-2', 'm-2', 'p-0')
    const optionsButton = document.createElement('button')
    optionsButton.innerText = "test"
    optionsButton.title = "title of me"
    optionsButton.setAttribute('data-toggle', 'popover')
    optionsButton.setAttribute('data-content', 'content of me')
    card.appendChild(optionsButton)
    return card;
}
const createCardsArray = async (data) => {
    const res = await data.map(d => {
        return createCard(d);
    })
    return res;
}
const loadPhotos = async () => {
    const photos = await getAllPhotos();
    const cards = await createCardsArray([1, 2]);
    displayPhotos(cards);
}

loadPhotos();
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <title>Pinterest Homepage</title>
</head>

<body>
    <div class="container-fluid">
        <div class="row" id="photosGrid">

        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
        integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
        crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
        crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
        crossorigin="anonymous"></script>
    <script type="text/javascript" src="index.js"></script>

</body>

</html>

1 Ответ

0 голосов
/ 29 апреля 2020

Инициализируйте всплывающее окно после создания элементов, если позднее будет добавлено больше элементов, вы можете повторно инициализировать всплывающее окно.

JQuery добавляет поповер к элементам во время инициализации, поэтому элементы, созданные после инициализации, не назначил свои всплывающие окна на JQuery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...