【原生js】js动态添加dom,如何绑定事件

首先要明白浏览器在加载页面的时候是按顺序来加载的,这样以来就很清楚了,js动态添加dom以后,这些dom并没有绑定事件,这个时候最简单的一个办法就是:将绑定事件的方法封装到一个函数A中,在动态添加完dom以后立即执行一次函数A即可。

需要注意的是,在你可能同事需要添加许多的dom,不要添加一个就执行一次函数A,这样会增加浏览器的负载,你需要在所有dom添加完以后在执行函数A,例如你用一个for循环遍历dom组合并拼接成一个字符串,然后添加到某个父级dom里面,这个时候你需要在循环外添加一次就可以了。

  代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>添加div并绑定点击事件</title>
 6     <style>
 7         div.btn{
 8             width: 200px;
 9             height: 50px;
10             line-height: 50px;
11             text-align: center;
12             border: solid 1px #000;
13             cursor: pointer;
14         }
15         div.innerDiv{
16             width: 50px;
17             height: 50px;
18             background-color: black;
19             margin: 10px;
20             cursor: pointer;
21         }
22     </style>
23 </head>
24 <body>
25 <div class="aa">
26     <div class="btn">添加div并绑定点击事件</div>
27     <div class="outerDiv"></div>
28 </div>
29 <script>
30     function getClass(classname) {
31         return document.getElementsByClassName(classname);
32     }
33     getClass(‘btn‘)[0].onclick=function () {
34         addDom();
35     }
36 //    将点击事件封装为函数
37     function funA() {
38         for(var i=0;i<getClass(‘innerDiv‘).length;i++){
39             getClass(‘innerDiv‘)[i].onclick=function () {
40                 alert(this.innerText);
41             }
42         }
43     }
44 //    将添加dom封装为函数
45     function addDom() {
46         var oldHtml=‘‘;
47         for(var j=0;j<6;j++){
48             oldHtml+=‘<div class="innerDiv">‘+j+‘</div>‘
49         }
50         getClass(‘outerDiv‘)[0].innerHTML=oldHtml;
51         funA();
52     }
53 //    如果将函数A放在这里就不会起作用的
54 //    funA();
55 </script>
56 </body>
57 </html>
时间: 2024-08-03 15:24:04

【原生js】js动态添加dom,如何绑定事件的相关文章

WEB前端技巧之JQuery为动态添加的元素绑定事件

jquery 为动态添加的元素绑定事件 如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上 可以用delegate来实现 .delegate( selector, eventType, handler ) 例如示例: $('someUlSelector').delegate('someLiSelector','click',function(){ //codes... //$(this) for the current jquery instance of

jQuery给动态添加的元素绑定事件的方法

jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给动态添加的元素绑定事件在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况 例如 1 <div id="testdiv"> 2 <ul></ul> 3 </div> 需要给<ul>里面动态添加的

jQuery-为动态添加的元素绑定事件

样例: $("#modify_nick").click(function () { $(this).css("display","none"); $("#nickname_span").empty(); var input = document.createElement("input"); $(input).attr("type", "text"); $(input

如何用js为动态生成的元素绑定事件

今天在开发项目的时候,需要为用js动态生成的元素绑定一个click事件,但是在页面加载之前,这个元素不存在,没法获取这个元素,然后为其添加事件.查阅jquery api 发现可以用on()事件(注意:新版本的jquery已经把live()去除,现在用on()),为动态生产的元素绑定事件,然后触发该事件执行.比如下面一个例子: 假设我们要给div动态添加的span绑定click事件形成如下结果 x //做法如下: ("#choose_result").on("click&quo

jQuery对 动态添加 的元素 绑定事件(on()的用法)

从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代码的时候就注册了相应绑定的事件,我们平常用jQuery给HTML标签绑定(单击)事件是一般这样写 $("#btnId").click(function () { //触发事件后 逻辑 });  但是对用js动态添加的元素 是无效的,即没有绑定单击事件,所以对于动态添加的标签需要用on()来

动态添加dom中的事件绑定

在添加dom时,会同时添加按钮,或者事件.在动态添加的时候,应该用 $(document).on('event','selector',function(){.......}) 例如:

Angularjs 动态添加指令并绑定事件

先说使用场景,动态生成DOM元素并绑定事件,非常常见的一种场景,用jq实现效果: http://jsbin.com/gajizuyuju/edit?html,js,output var count=0; $("#test").on("click",function(event){ if(event.target.tagName.toLowerCase()=="input") return; count++; var html="<

为动态添加的元素绑定事件

<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"> </script> <script> $(document).ready(function(){ $("body").on('click','p',function(){ $(this).hide(); }); }); </script>

js动态添加的html绑定事件

使用场景:网站上ul里面的li数据需要从后台数据查询出来即通过js添加数据.然后监听点击li点击事件. 添加数据代码: for(var i = 0; i < table.length; i++) { if(i === 0) { beforid = "role" + i; allrolestr += "<li class=\"roleli\" onclick=\"getroleclick(this)\" style=\&quo