如何为jquery中append()添加的html绑定事件

1.问题描述:

如图所示,利用jquery实现如下功能:


火狐截图_2017-11-21T02-29-56.437Z.png

会发现,表格的每一行新纪录都是用jquery的append()方法动态的添加上的html,在为每一行的“delete”绑定click事件的时候无法获取新添加的元素。

2.解决方案

方案一:

append追加元素后,紧接着再利用find()方法找到新追加的元素,为其添加事件,具体代码如下:

            $(function(){
                // 删除
                $("a").click(function(){
                    var $tr = $(this).parent().parent();
                    $tr.remove();
                });
                // 添加
                $("#addButton").click(function(){
                    var $name = $("#name").val().length!=0?$("#name").val():null;
                    var $email = $("#email").val().length!=0?$("#email").val():null;
                    var $salary =  $("#salary").val().length!=0?$("#salary").val():null;
                    
                    if($name && $email && $salary){
                        
                        $("<tr></tr").append("<td>"+$name+"</td>")
                        .append("<td>"+$email+"</td>")
                        .append("<td>"+$salary+"</td>")
                        .append("<td><a href='#'>Delete</a></td>")
                        .appendTo("table")
                        .find("a").click(function(){// 删除
                            var $tr = $(this).parent().parent();
                            $tr.remove();
                        });
                    }
                });
                
            });

方案二:

度娘推荐的方法,包含liv()方法和on()方法,为appen()动态添加的元素绑定事件,但是live()方法在 jQuery 版本 1.7 中被废弃,在版本 1.9 中被移除,现用on()方法代替。

on()定义和用法

on() 方法在被选元素及子元素上添加一个或多个事件处理程序。

语法:$(selector).on(event,childSelector,data,function)

自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。

注意:使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。

由此可见,可以为新添加的元素绑定事件。但是值得注意的是,该事件是委托在已知选择器获取的父级对象上的。具体如下面代码所示:

$(function(){
                
                var i = 0;
                $(":submit").click(function(){
                    
                    $("table").append($("<tr><td>"+$("#name").val()+"</td><td>"+$("#email").val()+"</td><td>"+$("#salary").val()+"</td><td><a id='"+i+"' href='#'>delete</a></td></tr>"));
                    $("table").on("click","#"+i+"",function(i){
                        $(this).parent().parent().remove();
                    });
                    
                    i++;
                });
                        
            });

可以看到,事件委托在了已存在的“table”上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、 jQuery 能做什么? jquery是一个丰富的js库,内部对js的很多复杂的方法进行了封装和加工,比如j...
    zh_yang阅读 1,431评论 6 13
  • 为甚嚒要学习jQuery? 因为JS中有很多痛点: window.onload事件只能出现一次,如果出现多次,后面...
    magic_pill阅读 851评论 0 13
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    前端进阶之旅阅读 16,688评论 18 503
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,494评论 0 44
  • 曾经专门写过三种不同的难受和三种不同的快乐,这段时间,我又看了一些书籍,对进化论、遗传学、脑科学又有了新的认知,今...
    戴老师成长记录仪阅读 435评论 0 2