首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人帮助我如何将函数绑定到dom异步。

有人帮助我如何将函数绑定到dom异步。
EN

Stack Overflow用户
提问于 2018-03-02 01:17:32
回答 2查看 39关注 0票数 0
  1. 我的第一个js文件内容: (函数(){ var = '111‘var app = document.getElementById('app');setTimeout(函数(){ app.innerHTML = html;},10) })()
  2. 我的第二个My文件内容: var app = document.getElementById('app');app.addEventListener('click',函数(E){ console.log(e.target);e.target.addEventListener('click',function(){ console.log(111) }) };
  3. Dom:

问题是如何通过javascript将函数绑定到dom 'test‘,而不需要委托事件。我的英语不是很好,希望你能理解并帮助我解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2018-03-02 01:56:22

传统的解决方案是直接在onclick标记上设置a处理程序。

代码语言:javascript
运行
复制
(function(){
    var html = '<div class="wrapper"><a onclick="testClicked(event)" class="test">111</a></div>'
    var app = document.getElementById('app');
    setTimeout(function(){
            app.innerHTML = html;
    },10)
})()
function testClicked(e){
  alert(111);
}
代码语言:javascript
运行
复制
<div id= 'app'></div>

票数 0
EN

Stack Overflow用户

发布于 2018-03-02 02:14:22

不要使用setTimeout修复异步加载问题。HTML5解析是异步的,调用setTimeout回调的时间可能是不可预测的。当文档按您指定的顺序准备好时,DomContentLoaded事件允许您执行代码:

代码语言:javascript
运行
复制
document.addEventListener("DOMContentLoaded", function(){
    var html = '<div class="wrapper"><a class="test">111</a></div>'
    var app = document.getElementById('app');
    app.innerHTML = html;
});

注意,匿名函数是,而不是,它直接使用IIFE调用,而是作为事件处理程序调用。添加到同一节点的侦听器将按照添加的顺序执行。如果第二个脚本总是在第一个脚本之后同步加载,则可以在第二个文件中添加第二个事件侦听器,以查找.test元素并向其添加一个单击处理程序:

代码语言:javascript
运行
复制
document.addEventListener("DOMContentLoaded", function() {
    var app = document.getElementById('app');
    app.querySelector("a.test").addEventListener('click',function(e){
         alert(111);
    });
});

这种方法是一个例子,并假设问题中提出的JavaScript文件结构最适合应用程序--总是有其他方法来做同样的事情。

为演示运行此代码段(不使用外部脚本文件):

代码语言:javascript
运行
复制
<script>
  document.addEventListener("DOMContentLoaded", function(){
    var html = '<div class="wrapper"><a class="test">111</a></div>'
    var app = document.getElementById('app');
    app.innerHTML = html;
});
</script>
<div id="app"></div>
<script>
  document.addEventListener("DOMContentLoaded", function() {
    var app = document.getElementById('app');
    app.querySelector("a.test").addEventListener('click',function(e){
         alert(111);
    });
  });
</script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49061310

复制
相关文章

相似问题

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