jquery给动态生成的元素绑定事件,on函数
首先先解释一下什么是动态生成的元素:动态生成的元素即我们用jquery的内部插入函数append()所生成的html代码。相对的也有静态生成的元素:即直接编写在页面的html代码。
下面通过例子来讲解:
html中有这样一个table:
- 1 <div class="table-responsive">
- 2 <table class="table table-bordered">
- 3 <thead>
- 4 <tr>
- 5 <th width="30">#</th>
- 6 <th width="30"><input type="checkbox"></th>
- 7 <th>名称</th>
- 8 <th width="100">操作</th>
- 9 </tr>
- 10 </thead>
- 11 <tbody id="rolePageBody">
- 12 </tbody>
- 13 <tfoot>
- 14 <tr>
- 15 <td colspan="6" align="center">
- 16 <div id="Pagination" class="pagination"><!-- 这里显示分页 --></div>
- 17 </td>
- 18 </tr>
- 19
- 20 </tfoot>
- 21 </table>
- 22 </div>
这是一个JavaScript函数:作用是动态的生成html代码将pageInfo中的数据显示在上边的tbody中
- 1 // 填充表格
- 2 function fillTableBody(pageInfo) {
- 3 // 判断pageInfo对象是否有效
- 4 if(pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0) {
- 5 $("#rolePageBody").append("<tr><td colspan='4' align='center'>抱歉!没有查询到您搜索的数据!</td></tr>");
- 6
- 7 return ;
- 8 }
- 9
- 10 // 使用pageInfo的list属性填充tbody
- 11 for(var i = 0; i < pageInfo.list.length; i++) {
- 12
- 13 var role = pageInfo.list[i];
- 14
- 15 var roleId = role.id;
- 16
- 17 var roleName = role.name;
- 18
- 19 var numberTd = "<td>"+(i+1)+"</td>";
- 20 var checkboxTd = "<td><input id='"+roleId+"' class='itemBox' type='checkbox'></td>";
- 21 var roleNameTd = "<td>"+roleName+"</td>";
- 22
- 23 var checkBtn = "<button type='button' class='btn btn-success btn-xs'><i class=' glyphicon glyphicon-check'></i></button>";
- 24
- 25 // 通过button标签的id属性(别的属性其实也可以)把roleId值传递到button按钮的单击响应函数中,在单击响应函数中使用this.id
- 26 var pencilBtn = "<button id='"+roleId+"' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'></i></button>";
- 27
- 28 // 通过button标签的id属性(别的属性其实也可以)把roleId值传递到button按钮的单击响应函数中,在单击响应函数中使用this.id
- 29 var removeBtn = "<button id='"+roleId+"' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'></i></button>";
- 30
- 31 var buttonTd = "<td>"+checkBtn+" "+pencilBtn+" "+removeBtn+"</td>";
- 32
- 33 var tr = "<tr>"+numberTd+checkboxTd+roleNameTd+buttonTd+"</tr>";
- 34
- 35 $("#rolePageBody").append(tr);
- 36 }
- 37
- 38 }
这样问题就来了,如果我们用传统的click方法绑定动态生成的button(上边代码第31行就是动态生成的button),就会出现问题,当我们翻页的时候,页面的按钮就又会重新生成,此时click就不会绑定到重新生成的按钮上,从而再次点击按钮时没有响应。
传统的click方法绑定动态生成的button:
- $(".pencilBtn").click(function () {
- alert("xxx");
- });
此时要解决这个问题,就要用到jquery的事件处理函数on()方法。
on函数有三个参数:
- 第一个参数需要传入事件类型: 注意:事件类型是不带小括号的,不要写成click(),应该写click
- 例如单击事件就传入click,失去焦点事件传入blur,表单提交事件传入submit。
- 第二个参数需要传入要绑定事件的元素的选择器。 注意:元素选择器不要写成$("#xxxx"),直接写#xxx就可以了
- 第三个参数需要传入事件的响应函数。
- <script type="text/javascript">
- $(function(){
- // ①首先找到所有“动态生成”的元素所附着的“静态”元素
- // ②on()函数的第一个参数是事件类型
- // ③on()函数的第二个参数是找到真正要绑定事件的元素的选择器
- // ③on()函数的第三个参数是事件的响应函数
- $("#rolePageBody").on("click",".pencilBtn",function(){
- alert("xxx");
- });
- });
- </script>
注:“动态生成”的元素所附着的“静态”元素,即js动态生成的html元素在html页面的父标签,例如上边代码中所有动态生成的html代码都要附着在id=rolePageBody的tbody中,所以需要动过这个依附的tbody对象来调用on方法。
jquery给动态生成的元素绑定事件,on函数的更多相关文章
- [jquery] 给动态生成的元素绑定事件 on方法
用底下的方法尝试了好多次都失败 $('.del').on('click',function(){ alert('aa'); })// 失败!! 终于在准备放弃前看到一篇博文说的方法 $(documen ...
- WEB前端技巧之JQuery为动态添加的元素绑定事件.md
jquery 为动态添加的元素绑定事件 如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上 可以用delegate来实现 .delegate( select ...
- Angular如何给动态生成的元素绑定事件
在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular ...
- jQuery:如何给动态生成的元素绑定事件?
jQuery的html()可以给现在元素附加新的元素,innerHTML也可以,那么,如何给这些新生成的元素绑定事件呢?直接在元素还未生成前就绑定肯定是无效的,因为所绑定的元素目前根本不存在. 然而, ...
- jQuery对于动态生成的元素绑定无效的问题~~
问题:很多时候发现,对动态生成的元素绑定click事件是无效的- 原因:直接绑定到动态生成的元素是无效的,是因为Jquery扫描文档找出所有的$(‘’)元素,并把函数绑定到每个元素的click事件上, ...
- 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 ...
- Angularjs给动态生成的元素绑定事件
//获取动态生成的元素 getJqforAnguar:function(jqid){ angular.element(document).injector().invoke(function($com ...
随机推荐
- 如何在jQuery的Ajax调用后管理一个重定向请求
1 success:function(data){ 2 if(data.xx == "xx") 3 { 4 //code... 5 window.location.href =&q ...
- java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
问题描述 Tomcat启动报错 java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 问题原因 因为tomcat在启动过程中jsp和se ...
- Java常见异常(Runtime Exception )小结
java.lang.NullPointerException 程序遇上了空指针 UnsupportedOperationException 不支持的操作 IllegalArgumentExceptio ...
- JS String总结
String常用总结 1.字符 length属性:表示字符串包含多少16位码元 charAt():方法返回给定索引位置的字符 charCodeAt() :可以查看指定码元的字符编码 String.fr ...
- Postman(接口自动化测试)
1.Postman 接口测试参数化可能大家都非常的熟悉,但是很多人很难处理参数化后如何断言的问题,特别是当参数中出现中文时,很容易导致在 Runner 页面引入外部文件时导致中文乱码的问题,今天这篇文 ...
- 操作系统中的进程同步与Window中利用内核对象进行线程同步的关系
操作系统中为了解决进程间同步问题提出了用信号量机制,信号量可分为四种类型分别是互斥型信号量,记录型信号量,AND型信号量,信号量集. 互斥型信号量 互斥型信号量是资源数量为1的特殊的记录型信号量.表示 ...
- buaaoo_fourth_assignment
你轻轻地走了 一.架构设计 (1)第一次作业 类图 复杂度分析 如上图是本单元第一次作业的架构设计,由于本人最开始未发现可以直接继承官方的类,所以自己将所用到的各种type都重新建了类,于是这就导致了 ...
- 『政善治』Postman工具 — 13、Postman接口测试综合练习
目录 (一)项目接口文档 1.鉴权接口 2.注册接口 3.登录接口 4.用户信息接口 5.注销接口 (二)网站上手动验证 (三)Postman测试实现 1.准备工作 (1)创建一个Collection ...
- [bug] MySQL 无法删除表
参考 https://blog.csdn.net/smbluesky/article/details/82427121
- 【转载】8.2.1 CPU性能测试工具
(KVM连载) 8.2.1 CPU性能测试工具 01/08/2013master 1 Comment 8.2.1 CPU性能测试工具 CPU是计算机系统中最核心的部件,CPU的性能直接决定了系统的计算 ...