【问题标题】:cannot add bootstrap popover from javascript to dynamically created elements无法将引导弹出窗口从 javascript 添加到动态创建的元素
【发布时间】:2020-04-29 07:36:50
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: javascript html jquery bootstrap-4 bootstrap-popover


    【解决方案1】:

    创建元素后初始化popover,如果以后添加更多元素,可以重新初始化popover。

    JQuery 在初始化期间将弹出框添加到元素中,因此在初始化后创建的元素不会被 JQuery 分配其弹出框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多