问题是如何通过javascript将函数绑定到dom 'test‘,而不需要委托事件。我的英语不是很好,希望你能理解并帮助我解决这个问题。
发布于 2018-03-02 01:56:22
传统的解决方案是直接在onclick标记上设置a处理程序。
(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);
}<div id= 'app'></div>
发布于 2018-03-02 02:14:22
不要使用setTimeout修复异步加载问题。HTML5解析是异步的,调用setTimeout回调的时间可能是不可预测的。当文档按您指定的顺序准备好时,DomContentLoaded事件允许您执行代码:
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元素并向其添加一个单击处理程序:
document.addEventListener("DOMContentLoaded", function() {
var app = document.getElementById('app');
app.querySelector("a.test").addEventListener('click',function(e){
alert(111);
});
});这种方法是一个例子,并假设问题中提出的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>
https://stackoverflow.com/questions/49061310
复制相似问题