• Jquery 页面元素事件绑定


    场景:

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

        <table class="Table" width="100%" cellpadding="0" cellspacing="0" >
                <thead>
                    <tr>
                        <td>名称</td>
                        <td style=" 100px;">题型</td>
                        <td style=" 100px;">创建人</td>
                        <td style=" 100px;">创建时间</td>
                        <td style=" 100px;">最后修改人</td>
                        <td style=" 100px;">最后修改时间</td>
                        <td style=" 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 Ajax 实例 ($.ajax、$.post、$.get)
    iframe的滚动条问题:显示/隐藏滚动条
    选择器的整理
    html标记
    Axure RP
    苹果官方人机交互指南中明确定义了应用中需要包括的图标和启动画面图片
    tableview_nav 动画效果
    WebView加载HTML图片大小自适应与文章自动换行
    iOS App创建桌面快捷方式
  • 原文地址:https://www.cnblogs.com/myfaith/p/3330516.html
Copyright © 2020-2023  润新知