首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式注入到HTML的模式不起作用

以编程方式注入到HTML的模式不起作用
EN

Stack Overflow用户
提问于 2021-11-28 17:31:03
回答 1查看 46关注 0票数 0

因此,目前我正在学习JavaScript,并试图将从JSON文件获取的一些数据务实地注入到HTML/物化模态中。

数据显示,标记是按钮,从文件中获取名称,但Modal不弹出。

现在,我已经在HTML中留下了一个硬编码的模型来测试它,这个模块可以工作,但是我从JSON获得并将它们注入HTML的那些模块不会弹出!我认为问题来自这样一个事实,即在注入完成后,Modal初始化需要重新初始化,但我可能错了!不管怎么说,我都没能开始做这件事,我想知道是否有人知道我做错了什么。

下面是简单的html:

代码语言:javascript
复制
<div class="container">
    <div class="row">
    </div>
    <!-- Modal Trigger -->
    <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>

    <!-- Modal Structure -->
    <div id="modal1" class="modal bottom-sheet">
        <div class="modal-content">
            <h4>Modal Header</h4>
            <p>A bunch of text</p>
        </div>
        <div class="modal-footer">
            <a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
        </div>
    </div>
</div>

以下是我的简单JS代码:

代码语言:javascript
复制
const content = document.querySelector('.row');
fetch('./perTab.json')
    .then((response) => {
        console.log(response, 'resolved');
        return response.json();
    }).then(data => {
        html = ``;
        console.log(data);
        data.forEach((element, index) => {
            html += `
            <!-- Modal Trigger -->
            <a class="waves-effect waves-light btn modal-trigger" href="#modal${index + 2}">${element.Name}</a>
    
            <!-- Modal Structure -->
            <div id="modal${index + 2}" class="modal bottom-sheet">
                <div class="modal-content">
                    <h4>h4</h4>
                    <p>A bunch of text</p>
                </div>
                <div class="modal-footer">
                    <a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
                </div>
            </div>
            `;
        });
        content.innerHTML = html;
    }).catch((error) => {
        console.log(error, ' broke the promise')
    })

//this is Modal initialization
document.addEventListener('DOMContentLoaded', () => {
    var elems = document.querySelectorAll('.modal');
    var instances = M.Modal.init(elems);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-28 17:39:41

我认为您需要在将var instances = M.Modal.init(elems);添加到内容的innerHTML之后执行它。

代码语言:javascript
复制
// For the dynamically generated modals :
content.innerHTML = html;
initializeModal();
..

// for DOMContentLoaded
document.addEventListener('DOMContentLoaded', initializeModal);

function initializeModal() {
  var elems = document.querySelectorAll('.modal');
  var instances = M.Modal.init(elems);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70145855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档