delegate委托事件(动态创建元素注册事件)

有这样一个小例子:

    <!--需求:给li里的a标签注册点击事件,并且点击“添加”按钮,新增li标签,新增的li里的a同样有注册事件-->
   <input type="button" id="btn" value="添加"/>
   <ul class="box">
       <li>
           <a href="javascript:void(0)">点击</a>
       </li>
       <li>
           <a href="javascript:void(0)">点击</a>
       </li>
       <li>
           <a href="javascript:void(0)">点击</a>
       </li>
       <li>
           <a href="javascript:void(0)">点击</a>
       </li>
   </ul>

正常注册点击事件给每个a的话,那么就满足不了最后一个“点击新的”,它就不会被注册事件,那么想要解决这个问题,就必须用到委托事件delegate,接下来说一下delegate事件的应用。

delegate方法常用的三个参数是:

selector:事件的最终执行元素

types:事件的类型

fn:所要执行的函数内容

那么就针对上面的案例写一下:点击每一个a,让其颜色变红,并且点击新增的a同样有这个效果

js如下:

<script src="js/jquery-1.11.3.min.js"></script>
<script>
    $(function(){
        $("#btn").click(function(){
            $("<li><a href=‘javascript:void(0)‘>点击新的</a></li>").appendTo("ul")
        });

        /*$(".box li a").click(function(){
            $(this).css("color","red");给a直接注册点击事件是满足不了的
        });*/

        $(".box").delegate("a","click",function(){
            $(this).css("color","red");
        });
        //原理:是给box注册委托事件但是最终是有a来执行

    })
</script>

这样效果就实现了

所以委托事件的优点有两个:

1、动态创建的元素也可添加上事件;

2、给多个元素注册事件也仅仅是注册一次

好了,关于委托事件就是这样了,当然也是比较简单的例子,可根据具体情况具体应用。

原文地址:https://www.cnblogs.com/web001/p/8428318.html

时间: 2024-10-24 12:37:58

delegate委托事件(动态创建元素注册事件)的相关文章

layUi 模板引擎动态创建元素之后,绑定的事件无效了;

模板引擎动态创建元素之后,绑定的事件无效了: layUi 模板引擎动态创建元素之后,绑定的事件无效了: 可以在 模板引擎成功后  注册事件 原文地址:https://www.cnblogs.com/lpp-11-15/p/12264046.html

JavaScript之jQuery-10 T-Query(T-Query、基本选择器、T-Query对象、操作方法、创建元素、事件绑定)

一.T-Query DOM 的使用问题 - 在 JavaScript中使用 DOM解析并操作 HTML 元素 - W3C 指定的 DOM 规范不仅适用于解析并操作 HTML 页面,还适用于解析并操作XML文件 - 使用 DOM 解析并操作 HTML页面中元素代码并不简洁 - 如果实现逻辑过于复杂的话,还可能影响 HTML页面的性能 - 我们可以通过自定义的T-Query完成对一些操作的封装,将基本操作进行简化 - T-Query功能大体如下: - 创建$全局对象,并提供工厂函数 - 使用$(ex

JS动态创建元素

动态创建元素的三种方法: 第一种document.write("") document.write("<input type=‘text’>  value='456'>"); 相当于创建了一个默认名是456的输入框 function f1(){        document.write("<input type='text' value='999999'>");    } 但是当document.write(&qu

Javascript:DOM动态创建元素实例应用

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Dom:动态创建元素</title> </head> <body> <ul id="demo1"> </ul> <input type="text" id=&quo

JS动态创建元素的方式

动态创建元素的三种方式: 1.document.write(): a.写在函数里面的话,会冲刷掉之前的页面元素,所以一般不用或是少用: b.会打开document.open()或关闭document.close()文档流: c.文档流: 默认的浏览器的加载顺序是从上往下依次加载的,把当前页面加载完毕之后,就相当于关闭了文档流. 例: <input type="text" value="123"/><input type="button&q

DOM中动态创建元素与jQuery中动态创建元素

DOM中动态创建元素与jQuery中动态创建元素 DOM中动态创建元素: 1. document.write("标签的代码")    缺点:页面中原有的元素会被覆盖掉 2. innerHTML 3. document.createElement("标签的名称") jQuery中动态创建元素: 1. $("标签的代码") 2. 对象.html("标签的代码") 原文地址:https://www.cnblogs.com/david

Asp.net mvc在view中用C#代码动态创建元素

来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=1231. 在view中可以用c#代码foreach动态创建元素2. 不加@{}下图中c#代码变成了白色,无法识别了. 原文地址:https://blog.51cto.com/14036626/2357251

动态创建元素中的异步事件参数传递问题

var a = $('<a>'); a.attr('href', '#'); a.attr('username', u1); a.click(function() { $.getJSON('/test.action', { //直接写u1会出现问题 username : $(this).attr('username') }, function(data) { check(data); }); }); 创建元素没有问题,元素中的异步事件如果需要参数,注意传递的方式:

克隆节点和动态创建元素的运用

克隆节点有深度克隆和浅克隆,它是用布尔类型来判断的,true代表深克隆,false代表浅克隆.深克隆会把标签,内容都克隆,浅克隆只会克隆标签. 创建动态元素有三种方式,分别为:document.write(),innerHTML,document.createElement.但我们一般用第三种,但第一和二种有些缺陷,但我们也要了解下. 第一种:document.write(),写在函数里面的话,会冲刷掉之前的页面元素,所以一般不用或是少用. 第二种:innerHTML,只是字符和数组的区别,字符