场景:

用一个Table来展示数据信息列表,通过鼠标点击Table中的Tr来获取到当前选中的数据行信息。

  1.     <table class="Table" width="100%" cellpadding="0" cellspacing="0" >
  2. <thead>
  3. <tr>
  4. <td>名称</td>
  5. <td style="width: 100px;">题型</td>
  6. <td style="width: 100px;">创建人</td>
  7. <td style="width: 100px;">创建时间</td>
  8. <td style="width: 100px;">最后修改人</td>
  9. <td style="width: 100px;">最后修改时间</td>
  10. <td style="width: 50px;">状态</td>
  11. </tr>
  12. </thead>
  13. <tbody>
  14. </tbody>
  15. </table>

情况1:数据信息是写死在页面上或者同步加载到页面。这时候需要绑定tr的点击事件,通常的做法是

  1. $(function () {
  2. $('.Table tbody tr').click(function(){
  3. alert(1);
  4.      /*其他需要处理的事件信息*/
  5. });
  6. });

这种情况下是没有问题的。

情况2:数据信息是通过Ajax动态生成的。这时候如果还是采用上面的方法来绑定事件到动态生成的tr元素上,你会发现就算你把鼠标点烂了,那个alert提示框也不会出来。

原因:通过Ajax加载的数据信息是在 调用 .bind() 之后添加的,所以点击tr元素不会有任何效果。

有人说通过live可以解决这个问题,我们尝试一下看看效果

  1. $(function () {
  2.   $('.Table tbody tr').live('click',function(){
  3.     alert(1);
  4.     /*其他需要处理的事件信息*/
  5.   });
  6. });

试一下果然行,但是这只是把事件绑定到了动态生成的元素上面,如果我们的点击事件里面需要获取动态生成的元素属性值等信息。如下

  1. $(function () {
  2.   $('.Table tbody tr').live('click',function(){
  3.     if ($(this).attr("class").indexOf("selected") != (-1)) {
  4. $('.treeTable tr').removeClass("selected");
  5. } else {
  6. $('.treeTable tr').removeClass("selected");
  7. $(this).addClass("selected");
  8. }
        }
  9.   });
  10. });

我点我点我点点点,失效了吧!!!!

所以live方法能将事件绑定到动态生成的元素上,但是要获取动态生成元素的属性值时是不行的,至少我没成功。

这个时候我们需要 .delegate()来帮忙

  1. $(document).delegate('.treeTable tbody tr', 'click', function () {
  2. if ($(this).attr("class").indexOf("selected") != (-1)) {
  3. $('.treeTable tr').removeClass("selected");
  4. } else {
  5. $('.treeTable tr').removeClass("selected");
  6. $(this).addClass("selected");
  7. }
  8. });

一切问题都解决了。

Jquery 页面元素事件绑定的更多相关文章

  1. jQuery 中的事件绑定

    一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...

  2. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  3. 关于jQuery新的事件绑定机制on()的使用技巧

    关于jQuery新的事件绑定机制on()的使用技巧 http://www.jb51.net/article/36064.htm 本篇文章介绍了,关于jQuery新的事件绑定机制on()的使用技巧.需要 ...

  4. html页面元素事件丢失

    前段时间做网站包括最近用mvc做oa都发现这个奇怪现象,就是页面加载完毕后页面元素事件(比如按钮点击.复选框change)一切正常,但是当执行查询或者其他操作后页面事件丢失.具体原因暂没有时间分析,现 ...

  5. Jquery中的事件绑定$(&quot;#btn&quot;).bind(&quot;click&quot;,function(){ })

    Jquery中的事件绑定:$("#btn").bind("click",function(){  }) 由于每次都这么调用太麻烦,所以jquery就用$(&qu ...

  6. jquery 未来元素事件示例 on() delegate() live()

    jquery 1.7版后建议使用on() $(document).on("click","#green",function(){$(this).after('& ...

  7. (Jquery)关于给动态加载的页面元素,绑定事件

    如果使用Jquery给元素绑定事件,一般会用bind,或者类似click函数来直接绑定. 但是对于动态生成的元素,会发现常规绑定无法生效,比如: <div class'div'></ ...

  8. Jquery 页面元素动态添加后绑定事件丢失方法,非 live

    代码1: 以此方法绑定的input框事件,在通过add按钮后用jquery绑定的事件 alert就会丢失 <input type="button" value="A ...

  9. 用jQuery.delegate()将事件绑定在父元素上面

    1.先看看官方的示例: <html> <head> <script type="text/javascript" src="/jquery/ ...

随机推荐

  1. Centos7部署CephFS

    标签(空格分隔): ceph环境,ceph,cephfs cephfs部署之前准备工作: 1. 一个 clean+active 的cluster cluster部署参考:centos7下搭建ceph ...

  2. 关于ESXI能虚拟出多少个虚拟机和CPU的关系

    当你的虚拟机报如下错误的时候: esxi5.0版本最高配置: https://www.vmware.com/content/dam/digitalmarketing/vmware/zh-cn/pdf/ ...

  3. Redhat 无线(Wifi)上网命令行配置

    小结两种命令行模式下配置无线wife的方法,实践测试通过(Red Hat Enterprise Linux release 6.0 Beta(Santiago)) 一.使用wpa_supplicant ...

  4. BurpSuite—-Sequencer模块(定序器)

    一.简介 Burp Sequencer是一种用于分析数据项的一个样本中的随机性质量的工具.你可以用它来测试应用程序的session tokens(会话tokens)或其他重要数据项的本意是不可预测的, ...

  5. Hive split 分割函数

    hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...

  6. js如何解析后台传过来的json字符串

    1.js如何解析后台传过来的json字符串? 注意:js是无法直接接收和使用json或者Php的数据,用的话会出现undefined,所以要转换一下. 方式一: var str = '{"r ...

  7. 值得一做》关于并查集的进化题目 BZOJ1015(BZOJ第一页计划)(normal-)

    这道题和以前做过的一道经典的洪水冲桥问题很像,主要做法是逆向思维.(BZOJ第10道非SB题纪念) 先给出题目 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者 ...

  8. wangEditor富文本编辑器

    设置好了是这样的, 有一个ID问content的编辑框,方便获取,这里的富文本编辑器的版本是2.2 官方文档说3就不支持textarea了 导入一下css 记得css文件夹下应该又3个文件,虽然没有直 ...

  9. conda create -n AlphaPose2018 python=2.7

    conda create -n AlphaPose2018 python=2.7Solving environment: done ==> WARNING: A newer version of ...

  10. Linuc bazaar命令

    一.简介 Bazaar 是一种强大的新一代源代码控制系统,它能够适用于所有主流操作系统,能够适应任何开发团队的工作模式.   二.安装 1)yum方式 yum install -y bzr   三.教 ...