Jquery 页面元素事件绑定
场景:
用一个Table来展示数据信息列表,通过鼠标点击Table中的Tr来获取到当前选中的数据行信息。
- <table class="Table" width="100%" cellpadding="0" cellspacing="0" >
- <thead>
- <tr>
- <td>名称</td>
- <td style="width: 100px;">题型</td>
- <td style="width: 100px;">创建人</td>
- <td style="width: 100px;">创建时间</td>
- <td style="width: 100px;">最后修改人</td>
- <td style="width: 100px;">最后修改时间</td>
- <td style="width: 50px;">状态</td>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
情况1:数据信息是写死在页面上或者同步加载到页面。这时候需要绑定tr的点击事件,通常的做法是
- $(function () {
- $('.Table tbody tr').click(function(){
- alert(1);
- /*其他需要处理的事件信息*/
- });
- });
这种情况下是没有问题的。
情况2:数据信息是通过Ajax动态生成的。这时候如果还是采用上面的方法来绑定事件到动态生成的tr元素上,你会发现就算你把鼠标点烂了,那个alert提示框也不会出来。
原因:通过Ajax加载的数据信息是在 调用 .bind() 之后添加的,所以点击tr元素不会有任何效果。
有人说通过live可以解决这个问题,我们尝试一下看看效果
- $(function () {
- $('.Table tbody tr').live('click',function(){
- alert(1);
- /*其他需要处理的事件信息*/
- });
- });
试一下果然行,但是这只是把事件绑定到了动态生成的元素上面,如果我们的点击事件里面需要获取动态生成的元素属性值等信息。如下
- $(function () {
- $('.Table tbody tr').live('click',function(){
- if ($(this).attr("class").indexOf("selected") != (-1)) {
- $('.treeTable tr').removeClass("selected");
- } else {
- $('.treeTable tr').removeClass("selected");
- $(this).addClass("selected");
- }
}- });
- });
我点我点我点点点,失效了吧!!!!
所以live方法能将事件绑定到动态生成的元素上,但是要获取动态生成元素的属性值时是不行的,至少我没成功。
这个时候我们需要 .delegate()来帮忙
- $(document).delegate('.treeTable tbody tr', 'click', function () {
- if ($(this).attr("class").indexOf("selected") != (-1)) {
- $('.treeTable tr').removeClass("selected");
- } else {
- $('.treeTable tr').removeClass("selected");
- $(this).addClass("selected");
- }
- });
一切问题都解决了。
Jquery 页面元素事件绑定的更多相关文章
- jQuery 中的事件绑定
一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- 关于jQuery新的事件绑定机制on()的使用技巧
关于jQuery新的事件绑定机制on()的使用技巧 http://www.jb51.net/article/36064.htm 本篇文章介绍了,关于jQuery新的事件绑定机制on()的使用技巧.需要 ...
- html页面元素事件丢失
前段时间做网站包括最近用mvc做oa都发现这个奇怪现象,就是页面加载完毕后页面元素事件(比如按钮点击.复选框change)一切正常,但是当执行查询或者其他操作后页面事件丢失.具体原因暂没有时间分析,现 ...
- Jquery中的事件绑定$("#btn").bind("click",function(){ })
Jquery中的事件绑定:$("#btn").bind("click",function(){ }) 由于每次都这么调用太麻烦,所以jquery就用$(&qu ...
- jquery 未来元素事件示例 on() delegate() live()
jquery 1.7版后建议使用on() $(document).on("click","#green",function(){$(this).after('& ...
- (Jquery)关于给动态加载的页面元素,绑定事件
如果使用Jquery给元素绑定事件,一般会用bind,或者类似click函数来直接绑定. 但是对于动态生成的元素,会发现常规绑定无法生效,比如: <div class'div'></ ...
- Jquery 页面元素动态添加后绑定事件丢失方法,非 live
代码1: 以此方法绑定的input框事件,在通过add按钮后用jquery绑定的事件 alert就会丢失 <input type="button" value="A ...
- 用jQuery.delegate()将事件绑定在父元素上面
1.先看看官方的示例: <html> <head> <script type="text/javascript" src="/jquery/ ...
随机推荐
- Centos7部署CephFS
标签(空格分隔): ceph环境,ceph,cephfs cephfs部署之前准备工作: 1. 一个 clean+active 的cluster cluster部署参考:centos7下搭建ceph ...
- 关于ESXI能虚拟出多少个虚拟机和CPU的关系
当你的虚拟机报如下错误的时候: esxi5.0版本最高配置: https://www.vmware.com/content/dam/digitalmarketing/vmware/zh-cn/pdf/ ...
- Redhat 无线(Wifi)上网命令行配置
小结两种命令行模式下配置无线wife的方法,实践测试通过(Red Hat Enterprise Linux release 6.0 Beta(Santiago)) 一.使用wpa_supplicant ...
- BurpSuite—-Sequencer模块(定序器)
一.简介 Burp Sequencer是一种用于分析数据项的一个样本中的随机性质量的工具.你可以用它来测试应用程序的session tokens(会话tokens)或其他重要数据项的本意是不可预测的, ...
- Hive split 分割函数
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...
- js如何解析后台传过来的json字符串
1.js如何解析后台传过来的json字符串? 注意:js是无法直接接收和使用json或者Php的数据,用的话会出现undefined,所以要转换一下. 方式一: var str = '{"r ...
- 值得一做》关于并查集的进化题目 BZOJ1015(BZOJ第一页计划)(normal-)
这道题和以前做过的一道经典的洪水冲桥问题很像,主要做法是逆向思维.(BZOJ第10道非SB题纪念) 先给出题目 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者 ...
- wangEditor富文本编辑器
设置好了是这样的, 有一个ID问content的编辑框,方便获取,这里的富文本编辑器的版本是2.2 官方文档说3就不支持textarea了 导入一下css 记得css文件夹下应该又3个文件,虽然没有直 ...
- conda create -n AlphaPose2018 python=2.7
conda create -n AlphaPose2018 python=2.7Solving environment: done ==> WARNING: A newer version of ...
- Linuc bazaar命令
一.简介 Bazaar 是一种强大的新一代源代码控制系统,它能够适用于所有主流操作系统,能够适应任何开发团队的工作模式. 二.安装 1)yum方式 yum install -y bzr 三.教 ...