jQuery中事件绑定,移除,触发事件

JQuery发展历程:

简单事件绑定(click,mouseenter,mouseleave)===>bind事件绑定===>delegate事件绑定===>on事件绑定

1.简单事件绑定

$("p").click(function(){
    //事件响应方法
});

缺点:不能绑定多个事件

2.bind事件绑定

$("p").bind("click,mouseenter",function(){
    //事件响应方法
});

第一个参数:事件类型

第二个参数:事件处理函数

缺点:不支持动态事件绑定

3.delegate注册,委托事件

<div>
    <span></span>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
</div>

$("div").delegate("p","click",function(){  //此时div中所有的 p 都会触发委托代理事件,但是span不会
    console.log($(this));  //当前点击的 p 标签
});

第一个参数:selector,要绑定事件的元素
第二个参数:事件类型
第三个参数:事件处理函数

特点:给父元素注册委托事件,最终还是由子元素执行

原理:给div(父元素)注册委托代理事件,当点击 p 触发事件时,(p 本身是没有任何事件,是借用冒泡,点击p 触发父元素(div)的委托代理事件),

此时 div 会查看点击的的事件元素和参数1 是否一致,如果一致则同意把事件给p。

可理解为:快递员,储存柜和自己的 关系

缺点:只能注册委托事件,需要记得注册事件太多

4.on事件绑定

方式1:on注册简单事件

$(selector).on("click",function(){}); //给$(selector)绑定事件,由自己触发,不支持动态绑定

方式二:on注册委托事件

$(selector).on("click","span",function(){}); //给$(selector)绑定代理事件,但必须是它的内部子元素span 才能触发这个事件,支持动态绑定

on注册事件的语法:

第一个参数:events,绑定事件的名称,可以用空格分隔的多个事件

第二个参数:selector,执行事件的后代元素(可选),如果没有后代元素,事件则自己执行

第三个参数:data,传递给处理函数的数据,事件触发的时候通过event.data来使用(不常使用)

第四个参数:handler,事件处理函数

$(selector).on(events[,selector][,data],handler);

案例:动态添加表格,删除表格

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #dv {
            width: 250px;
            height: 400px;
            /* border: 1px solid #333; */
            margin: 100px auto;
        }
        
        table {
            border-collapse: collapse;
        }
        
        td,
        th {
            width: 100px;
            border: 1px solid #333;
            line-height: 30px;
            text-align: center;
        }
    </style>
</head>

<body>
    <div id="dv">
        <input type="button" value="清空内容" id="delAll">
        <input type="button" value="添加" id="add"><br>
    </div>
    <script src="./js/jquery-1.12.4.js"></script>
    <script>
        $(function() {
            var arr = [{
                name: "宾利",
                score: 100
            }, {
                name: "刘华",
                score: 34
            }, {
                name: "恒瑞",
                score: 77
            }, {
                name: "利泰",
                score: 99
            }, {
                name: "哈斯",
                score: 76
            }, ];
            var $tab = $("<table><thead><tr><th>姓名</th><th>成绩</th><th>操作</th></tr></thead></table>");
            for (var i = 0; i < arr.length; i++) {
                var obj = arr[i];
                // 创建行对象
                var $tr = $("<tr><td>" + obj.name + "</td><td>" + obj.score + "</td><td><a href='#' class='del'>del</a></td></tr>");
                // 把行追加到table中
                $tr.appendTo($tab);
            }
            $tab.appendTo("#dv"); //把table显示在页面上
            // 添加事件
            $('#add').on("click", function() {
                $tr = $("<tr><td>厉害了</td><td>10000</td><td><a href='#' class='del'>del</a></td></tr>");
                $tr.appendTo($tab);
            });
            // 清空事件
            $("#delAll").on("click", function() {
                $("tbody").remove();
            });
            // 单行删除事件(找到他们共同的父级元素===>tbody)
            $("tbody").on("click", ".del", function() {
                $(this).parents("tr").remove();
            });
        });
    </script>
</body>

</html>
View Code

 2、移除事件绑定事件

unbind 和 undelegate 现在不使用了,统一使用 off 方式(针对on绑定事件)

方式一:

 1.不传参

$(selector).off();  //解绑 selector 的所有绑定事件

方式二:

 2.传参

$(selector).off("click");  //解绑指定事件,譬如:click

3、触发事件

 方式一:

$(selector).click(); // 直接输入选择器名字及触发的事件类型

 方式二:

$(selector).triggle("click"); // 选择要触发的元素,调用triggle 方法

案例:触发事件

$("p").on("click",function(){
    alert("p 的点击事件");
});

$("#btn").on("click",function(){
    //方式一:
    $("p").click();
    //方式二:
    $("p").triggle("click");
});
View Code
原文地址:https://www.cnblogs.com/qtbb/p/12617900.html