WEB前端技巧之JQuery为动态添加的元素绑定事件.md
jquery 为动态添加的元素绑定事件
如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上
可以用delegate来实现
.delegate( selector, eventType, handler )
例如示例:
$('someUlSelector').delegate('someLiSelector','click',function(){
//codes...
//$(this) for the current jquery instance of the element
});
jQuery的delegate有好几个缺憾
因为sizzle少提供了以refEl为参考、一个按selector来筛选els的filter(els,selector,refEl)的功能,jq需要自己去实现类似的功能。
- 其一:selector是基于
:root
的,而不是:scope
的。所以,在写代码时,需要带上scrope
的定位部分。—-注::root
指document根节点,:scope
指代理节点
示例代码如
<HTML><HEAD><TITLE>JK Test</TITLE>
<METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
<scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
<style>
div{border:1px solid balck;padding:5px;margin:2px;}
</style>
</HEAD>
<body>
<divid="div1">div1
<divid="div1_1">div1_1
<divid="div1_1_1">div1_1_1
<spanstyle="color:red">span</span>
</div>
</div>
<divid="div1_2">div1_2
</div>
</div>
</body>
<scripttype="text/javascript">
$('#div1').delegate('#div1>*','click',function(){alert(this.innerHTML);});//点击div1_1,div1_2或时,都有效。
</script>
</HTML>
//例如,代理div1的儿子,需要这样写:
$('#div1').delegate('#div1>*','click',fun});
//而不是这样写:
$('#div1').delegate('>*','click',fun});
- 其二:多个祖先满足条件时,只触发了target的closest的那一个祖先,而不是都触发。—-想不通jquery为什么要采用这个策略
示例代码如
<HTML><HEAD><TITLE>JK Test</TITLE>
<METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
<scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
<style>
div{border:1px solid balck;padding:5px;margin:2px;}
</style>
</HEAD>
<body>
<divid="div1">div1
<divid="div1_1">div1_1
<divid="div1_1_1">div1_1_1
<spanstyle="color:red">span</span>
</div>
</div>
<divid="div1_2">div1_2
</div>
</div>
</body>
<scripttype="text/javascript">
$('body').delegate('div','click',function(){alert(this.innerHTML);});//点击id1_1_1时,应该同时代理到三个div的点击
</script>
</HTML>
- 其三:与sizzle一样,可能是没有回溯,在某些情况下有bug。
例如,当span有多个祖先是div时,这个代理会失效:$('body').delegate('body>div span','click',fun;});
示例代码如
<HTML><HEAD><TITLE>JK Test</TITLE>
<METAcontent="text/html; charset=gb2312"http-equiv=Content-Type>
<scriptsrc="http://common.cnblogs.com/script/jquery.js"type="text/javascript"></script>
<style>
div{border:1px solid balck;padding:5px;margin:2px;}
</style>
</HEAD>
<body>
<divid="div1">div1
<divid="div1_1">div1_1
<divid="div1_1_1">div1_1_1
<spanstyle="color:red">span</span>
</div>
</div>
<divid="div1_2">div1_2
</div>
</div>
</body>
<scripttype="text/javascript">
$('body').delegate('body>div span','click',function(){alert(this.innerHTML);});//点击span时,应该出现alert的
</script>
</HTML>
WEB前端技巧之JQuery为动态添加的元素绑定事件.md的更多相关文章
- jQuery 为动态添加的元素绑定事件
在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...
- jQuery对 动态添加 的元素 绑定事件(on()的用法)
从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代 ...
- jquery append 动态添加的元素绑定事件on
用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...
- jQuery给动态添加的元素绑定事件的方法
我们在开发过程会遇到无法给动态元素添加绑定事件,解决方案如下: 例如 <div id="testdiv"> <ul></ul> </d ...
- jquery html动态添加的元素绑定事件详解
在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况: <div id="testdiv"> <ul></ul> </div&g ...
- 关于 jquery html 动态添加的元素绑定事件——On()
Ajax动态生成的数据,动作绑定需要重新执行 $(document).on('click','.btn1',function(){}); 替换: $('btn1').on('click') = fun ...
- Jquery动态添加的元素绑定事件的3种方法
假设我们点击li标签,弹出他的文本,如果是动态添加的li,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...
- jQuery中如何给动态添加的元素绑定事件
jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...
- js动态添加的元素绑定事件
最近做的项目要实现一个动态添加动态删除的功能,思考了一下,该怎么给动态添加的元素绑定事件.最后觉得有两种方式比较可靠,第一种是在动态添加的html代码里添加oclick事件,然后给传个唯一的参数来判断 ...
随机推荐
- libgdx学习记录12——圆角矩形CircleRect
libgdx提供了ShapeRenderer这个工具,用它可以画点.画线.画圆.画矩形.画椭圆.画扇形,但是没有提供画圆角矩形的方法. 刚开始自己尝试分成8端,4端画直线,4端画扇形,发现多了半径几部 ...
- KVM虚拟机管理——虚拟机创建和操作系统安装
1. 概述2. 交互式安装2.1 图形化-本地安装2.1.1 图形化本地CDROM安装2.2.2 图形化本地镜像安装2.2 命令行-本地安装2.2.1 命令行CDROM安装2.3 图形化-网络安装2. ...
- C++学习之 类
1.类规范 类声明:包括数据成员.成员函数(共有接口)的声明 类方法定义 C++程序员将接口(类)放在头文件中,将实现放在源代码文件中 类设计尽量将共有接口和实现细节分开,数据隐藏(将数据放在私有部分 ...
- PHP学习 流程控制和数组
flow control 流程控制decision structure 判断结构loop structure 循环结构 if(condition){statement1;} if(){}else{} ...
- 20135337朱荟潼 Linux第三周学习总结 ——Linux内核源代码简介
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.ar ...
- 20170929php
这是之前学习PHP类使用的代码 <?phpclass animal{ var $name="1"; var $sex="2"; public static ...
- LeetCode-----算法448.找到所有数组中消失的数字
题目: 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. ...
- Daily Scrum - 12/01
Meeting Minutes 今天重阳去和UI设计团队的人去讨论UI方面的事宜了,剩下的人主要还是在讨论文件输入输出的事.目前总算是能实现文件存取了,尽量在明天前把文件的格式内容都弄好. Burnd ...
- Daily Scrum - 11/26
Meeting Minutes 今天是Sprint 3第一天,任烁向我们交代了他那边的代码情况,他这两天回学校有点事,人千和章玮暂时先熟悉一下他写的那部分,正在试图将代码merge起来.重阳实现了进度 ...
- python数据分析Titanic_Survived预测
import pandas as pd import matplotlib.pyplot as plt # matplotlib画图注释中文需要设置from matplotlib.font_manag ...