随笔一个dom节点绑定事件

  以下利用jquery说明:

    js中,给一个dom节点绑定事件再平常不过了。这里说下,如果dom经常发生变化的话,给这个dom绑定事件的情况。

比如代码如下:

li的节点,绑定了事件:点击会打出来里头的html内容。

button点击事件:会生成一个li节点。

 1 <html>
 2 <head>
 3     <meta charset="UTF-8">
 4 </head>
 5 <body>
 6 <ul class="ul">
 7     <li class="li">abc</li>
 8     <li class="li">abc</li>
 9     <li class="li">abc</li>
10 </ul>
11
12 <hr/>
13 <button id="btn">add</button>
14 </body>
15 <script type="text/javascript" src="jquery.js"></script>
16 <script type="text/javascript">
17     $(function(){
18
19         $(‘.li‘).click(function(){
20             console.log(this.innerHTML);
21         });
22
23         $(‘#btn‘).on(‘click‘, function(){
24             $(‘.ul‘).append(‘<li class="li">XXX</li>‘);
25         });
26
27     });
28
29 </script>
30 </html>

如果这么写的话,点击以后生成的li节点,点击是不会打出log的~

因为代码执行来看,未点击add时,我们给每一个li绑定了click事件,这仅限于当前dom树下的li。$(‘.li‘)仅是获取当前dom下的所有class为li的节点。

当点击button后,再生成的节点,是绑定不上的。

咋办咧?此时,我们会利用事件的冒泡或者捕获的机制,对li的父节点ul打主意~如果给ul绑定一个click事件,那么即便是点击新生成的它的子节点,不也有了事件么?哈哈~就是这样

代码如下:

$(‘.ul‘).on(‘click‘, ‘.li‘, function(){
     console.log(this.innerHTML);
});

我们给.ul绑定了事件,在其中选择.li选择器,这样就解决了~

时间: 2024-10-26 05:01:25

随笔一个dom节点绑定事件的相关文章

【转载】W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。

原文  http://blog.csdn.net/u011719449/article/details/23787627 在准备阿里前端面试的时候看到这么一道题. 一个DOM元素绑定两个事件,一个冒泡,一个捕获,则事件会执行多少次,执行顺序如何. 这导致了我对冒泡和捕获又进一步深入的了解.(永远都在发现自己知识匮乏的日子中度过人生真是好抓急啊.) 首先冒泡和捕获是怎么一回事. 简单点说.冒泡就是从下往上,像鱼吐泡,泡泡是从下往上升的,也就是DOM元素被触法事件时(此时的dom元素为目标元素),目

一个DOM元素绑定多个事件时,先执行冒泡还是捕获

绑定在被点击元素的事件是按照代码顺序发生,其他元素通过冒泡或者捕获“感知”的事件,按照W3C的标准,先发生捕获事件,后发生冒泡事件.所有事件的顺序是:其他元素捕获阶段事件 -> 本元素代码顺序事件 -> 其他元素冒泡阶段事件 . 一个DOM元素绑定两个事件,一个冒泡,一个捕获,则事件会执行多少次,执行顺序如何. 首先来了解一下冒泡和捕获是怎么回事: 1.冒泡 冒泡是从下向上,DOM元素绑定的事件被触发时,此时该元素为目标元素,目标元素执行后,它的的祖元素绑定的事件会向上顺序执行.如下代码所示,

JS(原生)事件委托:为动态创建的节点绑定事件

项目开发中经常需要为动态创建的节点绑定事件, 比如需要创建一个动态列表:在li的数量非常少的时候,为每一个li绑定事件不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(假设),为每个li绑定事件就会对页面性能产生很大的影响.当有大量元素需要绑定相同事件的时候可采用事件委托,将在目标元素上要处理的事件委托给父元素或者祖先元素 优点    事件委托对于web应用程序的性能有如下几个优点:    1.需要管理的函数变少了    2.占用的内存少了    3.javascrip

第一话:IE中用DOM方法绑定事件

工作比较忙,但是也一定要抽时间出来提升一下自己的基本功,只有技术实力到位,才能为公司和个人创造更多的价值.下面进入主题: IE中事件监听比较容易用到,但是由它所引出的一个关于this的问题,不得不着重的去思考和记录一下. 一.浏览器中不同的事件监听/绑定(个人感觉用监听比较通俗易懂): //IE element.attachEvent("event",functionname); //参数:1,表示监听的事件,需要在事件前加on(onclick,onfocus,onkeyevent……

Js为Dom元素绑定事件须知

为异步加载的Dom 元素绑定事件必须在加载完成之后绑定: $('body').load('LearnClickBinding.ashx');$('a').click(function () { alert('I was clicked!'); }); 上面的绑定是无效的,因为异步加载需要时间,而在获取元素之前,早已执行了$('a').click();方法,所以绑定失败. 正确的做法是,等待元素加载完后再执行 $('a').click(); $('body').load('LearnClickBi

关于dom节点绑定滑动事件导致浏览器上下滑动失效解决方案

1.移动端开发往往需要添加一下自定义的左右滑动事件,但是添加了左右滑动事件之后就要阻止浏览器大默认事件,否则dom节点的滑动事件和浏览器本身的滑动会出现冲突,导致滑动的时候会出现消失瞬间再出现的效果 解决方案:event.preventDefault();//阻止浏览器默认事件即可 2.阻止浏览器默认事件之后发现这添加了滑动事件的dom节点上下滑动也失效,这是一个很坑爹的地方,如果你的活动dom节点占据了整块屏幕,也就是说你的页面上下动不了了: 解决方案:设置两个开关,分别对应左右滑动和上下滑动

jquery bind 方法一个特点(绑定多个方法到一个dom的某个事件)

目录: [TOC] jquery bind方法介绍 方法声明:bind(type,[data],fn) 方法说明:为每一个匹配元素的特定事件(eg:click)绑定一个事件处理器函数.这个事件处理函数会通过参数方式接收到一个事件对象,可以通过它来阻止(浏览器)默认的行为.如果既想取消默认的行为,又想阻止事件起泡,这个事件处理函数必须返回false. 技巧:多数情况下,可以把事件处理器函数定义为匿名函数. 参数意义 type (String) : 事件类型. data (Object) : (可选

jquery 给一个节点绑定事件总结

//给输入框绑定事件   key = $("#key");   key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);   key.bind('keydown', function (e){if(e.which == 13){searchNode();}});      setT

用live()方法给新增节点绑定事件

jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效.鹤峰县烟草专卖局 这个方法是基本是的 .bind() 方法的一个变体.使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有.为此需要再使用一次 .bind() 才行.比如说: 1 <body> 2     <div class="clickme">Click here</div> 3 </body> 可以给这个