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

如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上

可以用delegate来实现

  1. .delegate( selector, eventType, handler )

例如示例:

  1. $('someUlSelector').delegate('someLiSelector','click',function(){
  2. //codes...
  3. //$(this) for the current jquery instance of the element
  4. });

jQuery 事件 - delegate() 方法


jQuery的delegate有好几个缺憾

因为sizzle少提供了以refEl为参考、一个按selector来筛选els的filter(els,selector,refEl)的功能,jq需要自己去实现类似的功能。

  • 其一:selector是基于:root的,而不是:scope的。所以,在写代码时,需要带上 scrope 的定位部分。—-注::rootdocument根节点:scope代理节点

示例代码如

  1. <HTML><HEAD><TITLE>JK Test</TITLE>
  2. <METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
  3. <scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
  4. <style>
  5. div{border:1px solid balck;padding:5px;margin:2px;}
  6. </style>
  7. </HEAD>
  8. <body>
  9. <divid="div1">div1
  10. <divid="div1_1">div1_1
  11. <divid="div1_1_1">div1_1_1
  12. <spanstyle="color:red">span</span>
  13. </div>
  14. </div>
  15. <divid="div1_2">div1_2
  16. </div>
  17. </div>
  18. </body>
  19. <scripttype="text/javascript">
  20. $('#div1').delegate('#div1>*','click',function(){alert(this.innerHTML);});//点击div1_1,div1_2或时,都有效。
  21. </script>
  22. </HTML>
  1. //例如,代理div1的儿子,需要这样写:
  2. $('#div1').delegate('#div1>*','click',fun});
  3. //而不是这样写:
  4. $('#div1').delegate('>*','click',fun});
  • 其二:多个祖先满足条件时,只触发了target的closest的那一个祖先,而不是都触发。—-想不通jquery为什么要采用这个策略

示例代码如

  1. <HTML><HEAD><TITLE>JK Test</TITLE>
  2. <METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
  3. <scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
  4. <style>
  5. div{border:1px solid balck;padding:5px;margin:2px;}
  6. </style>
  7. </HEAD>
  8. <body>
  9. <divid="div1">div1
  10. <divid="div1_1">div1_1
  11. <divid="div1_1_1">div1_1_1
  12. <spanstyle="color:red">span</span>
  13. </div>
  14. </div>
  15. <divid="div1_2">div1_2
  16. </div>
  17. </div>
  18. </body>
  19. <scripttype="text/javascript">
  20. $('body').delegate('div','click',function(){alert(this.innerHTML);});//点击id1_1_1时,应该同时代理到三个div的点击
  21. </script>
  22. </HTML>
  • 其三:与sizzle一样,可能是没有回溯,在某些情况下有bug。

例如,当span有多个祖先是div时,这个代理会失效:$('body').delegate('body>div span','click',fun;});
示例代码如

  1. <HTML><HEAD><TITLE>JK Test</TITLE>
  2. <METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
  3. <scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
  4. <style>
  5. div{border:1px solid balck;padding:5px;margin:2px;}
  6. </style>
  7. </HEAD>
  8. <body>
  9. <divid="div1">div1
  10. <divid="div1_1">div1_1
  11. <divid="div1_1_1">div1_1_1
  12. <spanstyle="color:red">span</span>
  13. </div>
  14. </div>
  15. <divid="div1_2">div1_2
  16. </div>
  17. </div>
  18. </body>
  19. <scripttype="text/javascript">
  20. $('body').delegate('body>div span','click',function(){alert(this.innerHTML);});//点击span时,应该出现alert的
  21. </script>
  22. </HTML>

中文API的解释delegate

WEB前端技巧之JQuery为动态添加的元素绑定事件.md的更多相关文章

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

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

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

    从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代 ...

  3. jquery append 动态添加的元素绑定事件on

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

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

    我们在开发过程会遇到无法给动态元素添加绑定事件,解决方案如下: 例如 <div id="testdiv">   <ul></ul> </d ...

  5. jquery html动态添加的元素绑定事件详解

    在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况: <div id="testdiv"> <ul></ul> </div&g ...

  6. 关于 jquery html 动态添加的元素绑定事件——On()

    Ajax动态生成的数据,动作绑定需要重新执行 $(document).on('click','.btn1',function(){}); 替换: $('btn1').on('click') = fun ...

  7. Jquery动态添加的元素绑定事件的3种方法

    假设我们点击li标签,弹出他的文本,如果是动态添加的li,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...

  8. jQuery中如何给动态添加的元素绑定事件

    jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...

  9. js动态添加的元素绑定事件

    最近做的项目要实现一个动态添加动态删除的功能,思考了一下,该怎么给动态添加的元素绑定事件.最后觉得有两种方式比较可靠,第一种是在动态添加的html代码里添加oclick事件,然后给传个唯一的参数来判断 ...

随机推荐

  1. Partition4:增加分区

    在关系型 DB中,分区表经常使用DateKey(int 数据类型)作为Partition Column,每个月的数据填充到同一个Partition中,由于在Fore-End呈现的报表大多数是基于Mon ...

  2. stl源码剖析 详细学习笔记stack queue

    // //  stack.cpp //  笔记 // //  Created by fam on 15/3/15. // // //---------------------------15/03/1 ...

  3. jenkins+maven+svn+npm自动发布部署实践

    一.系统版本centos7.6 二.根据jenkins官方安装方法yum安装jenkins 1.进入jenkins官网下载页面https://jenkins.io/download/,选择Red Ha ...

  4. 开发认为不是bug,你该如何处理?

    这是软件测试员面试时经常被问到的问题.看了很多答案,个人觉得作为有工作经验的测试人员回答时不能完全照搬标准答案,技术面试官想听的当然不止如此.毕竟这种情况在实际工作中也常常出现,具体问题要具体分析,你 ...

  5. 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget

    目录 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget 正文 对我的启发 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois ...

  6. pytorch 对变长序列的处理

    一开始写这篇随笔的时候还没有了解到 Dateloader有一个 collate_fn 的参数,通过定义一个collate_fn 函数,其实很多batch补齐到当前batch最长的操作可以放在colla ...

  7. Backbone实践案例

    By:软件11 王思伦 2013-10-4 Backbone简述: Backbone基于MVC架构,用于开发重量级Javascript应用的框架. 如上文所述,Backbone包含多种类,但主要包含了 ...

  8. Mac用户抓包软件Charles 4.0 破解 以及 抓取Https链接设置

    相信大家曾经都是Window的用户,作为前端哪能没有一款抓包工具,抓包工具可以非常便捷的帮助我们分析接口返回报文数据,快速定位问题. 曾经横扫window用户的Fiddler便是我们的挚爱,然而,作为 ...

  9. week8:个人博客作业

    团队作业(5) 要求 在PM 带领下, 每个团队深入分析下面行业的App, 找到行业的Top 5 (从下面的三个备选中,任选一个行业即可) 英语学习/词典App 笔记App 旅游行业的手机App 选择 ...

  10. Beta阶段冲刺四

    Beta阶段冲刺四 Task1:团队TSP 团队任务 预估时间 实际时间 完成日期 新增其他学院的爬虫 180 130 11.30 新增其他学院的数据库字段修改 180 160 12.1 新增其他学院 ...