jQuery事件

news/2024/7/10 23:26:08 标签: jquery, javascript, 前端

1. jQuery事件注册

单个事件注册

语法:

element.事件(function(){})

eg:$(“div”).click(function(){ 事件处理程序 })

其他事件和原生基本一致。比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }        
        .current {
            background-color: purple;
        }
    </style>
    <script src="jquery.min.js"></script>
</head>
<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <ol>
    </ol>
    <script>javascript">
        $(function() {
            // 1. 单个事件注册
             $("div").click(function() {
                 $(this).css("background", "purple");
             });
             $("div").mouseenter(function() {
                $(this).css("background", "skyblue");
             });
        })
    </script>
</body>
</html>

2. jQuery事件处理

2.1 事件处理on()绑定事件

on() 方法在匹配元素上绑定一个或多个事件的事件处理函数

语法:element.on(events,[selector],fn)

  1. events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
  2. selector: 元素的子元素选择器 。
  3. fn:回调函数 即绑定在元素身上的侦听函数。

on() 方法优势1:

可以绑定多个事件,多个处理事件处理程序。

 $(“div”).on({
  mouseover: function(){}, 
  mouseout: function(){},
  click: function(){}	
}); 

如果事件处理程序相同

 $(“div”).on(“mouseover mouseout”, function() {
   $(this).toggleClass(“current”);
  });  

on() 方法优势2:

可以事件委派操作 。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。

$('ul').on('click', 'li', function() {
    alert('hello world!');
}); 

在此之前有bind(), live() delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们。

on() 方法优势3:

动态创建的元素,click() 没有办法绑定事件, on() 可以给动态生成的元素绑定事件

 $(“div").on("click",”p”, function(){
     alert("俺可以给动态生成的元素绑定事件")
 });


 $("div").append($("<p>我是动态创建的p</p>"));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }      
        .current {
            background-color: purple;
        }
    </style>
    <script src="jquery.min.js"></script>
</head>
<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <ol>
    </ol>
    <script>javascript">
        $(function() {
            // 2. 事件处理on
            // (1) on可以绑定1个或者多个事件处理程序
            // $("div").on({
            //     mouseenter: function() {
            //         $(this).css("background", "skyblue");
            //     },
            //     click: function() {
            //         $(this).css("background", "purple");
            //     },
            //     mouseleave: function() {
            //         $(this).css("background", "blue");
            //     }
            // });
            $("div").on("mouseenter mouseleave", function() {
                $(this).toggleClass("current");
            });
            // (2) on可以实现事件委托(委派)
            // $("ul li").click();
            $("ul").on("click", "li", function() {
                alert(11);
            });
            // click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
            // (3) on可以给未来动态创建的元素绑定事件
            // $("ol li").click(function() {
            //     alert(11);
            // })
            $("ol").on("click", "li", function() {
                alert(11);
            })
            var li = $("<li>我是后来创建的</li>");
            $("ol").append(li);
        })
    </script>
</body>
</html>

2.2 事件处理 off() 解绑事件

off() 方法可以移除通过 on() 方法添加的事件处理程序。

$("p").off() // 解绑p元素所有事件处理程序

$("p").off( "click") // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名

$("ul").off("click", "li"); // 解绑事件委托

如果有的事件只想触发一次, 可以使用 one() 来绑定事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>javascript">
        $(function() {
            $("div").on({
                click: function() {
                    console.log("我点击了");
                },
                mouseover: function() {
                    console.log('我鼠标经过了');
                }
            });
            $("ul").on("click", "li", function() {
                alert(11);
            });
            // 1. 事件解绑 off 
            // $("div").off();  // 这个是解除了div身上的所有事件
            $("div").off("click"); // 这个是解除了div身上的点击事件
            $("ul").off("click", "li");
            // 2. one() 但是它只能触发事件一次
            $("p").one("click", function() {
                alert(11);
            })
        })
    </script>
</head>
<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <p>我是屁</p>
</body>
</html>

2.3 自动触发事件 trigger()

有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。

element.click() // 第一种简写形式

element.trigger("type") // 第二种自动触发模式

element.triggerHandler(type) // 第三种自动触发模式(triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。)

$("p").on("click", function () {
  alert("hi~");
}); 

$("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>javascript">
        $(function() {
            $("div").on("click", function() {
                alert(11);
            });
            // 自动触发事件
            // 1. 元素.事件()
            // $("div").click();会触发元素的默认行为
            // 2. 元素.trigger("事件")
            // $("div").trigger("click");会触发元素的默认行为
            $("input").trigger("focus");
            // 3. 元素.triggerHandler("事件") 就是不会触发元素的默认行为
            $("div").triggerHandler("click");
            $("input").on("focus", function() {
                $(this).val("你好吗");
            });
            // $("input").triggerHandler("focus");
        });
    </script>
</head>
<body>
    <div></div>
    <input type="text">
</body>
</html>

3. jQuery事件对象

事件被触发,就会有事件对象的产生。

element.on(events,[selector],function(event) {})

阻止默认行为:event.preventDefault() 或者 return false
阻止冒泡: event.stopPropagation()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>javascript">
        $(function() {
            $(document).on("click", function() {
                console.log("点击了document");
            })
            $("div").on("click", function(event) {
                // console.log(event);
                console.log("点击了div");
                event.stopPropagation();
            })
        })
    </script>
</head>
<body>
    <div></div>
</body>
</html>

http://www.niftyadmin.cn/n/293545.html

相关文章

Hudi学习笔记(1)

使用注意 从 0.10.0 版本开始&#xff0c;primaryKey 为必须的&#xff0c;不再支持没有主键的表。 primaryKey、primaryKey 和 type 均大小写敏感。 对于 MOR 类型的表&#xff0c;preCombineField 为必须的。 当设置 primaryKey、primaryKey 或 type 等 hudi 配置时&#…

【实战项目开发技术分享】如何实现ROS数据同步

文章目录 前言一、什么是消息过滤器(message_filters)?二、消息过滤器(message_filters)的同步策略2.1 TimeSynchronizer2.2 ApproximateTime2.3 ExactTime三、如何使用消息过滤器(message_filters)?3.1 安装3.2 使用 ApproximateTime实现数据同步3.3 使用消息过滤器(…

Linux — 线程池及多线程结尾

目录 一、线程池 线程池的应用场景&#xff1a; 线程池示例&#xff1a; 二、线程安全的单例模式 什么是单例模式 什么是设计模式 单例模式的特点 饿汉实现方式和懒汉实现方式 三、STL,智能指针和线程安全 四、其他常见的各种锁 五、读者写者问题(了解) 读写锁 读写…

PKUSC 2023 游记

游记是可以写一起的吗&#xff0c;我不知道&#xff0c;于是我选择分开写。 Day -inf 不给 NOI Linux 环境&#xff0c;想死。 下载了红色的 Dev C&#xff0c;编译时间 rand()%60s&#xff0c;真的不是我不想用它打模拟。 世界上怎么会有 Windows 这么野蛮的系统。 想恶补…

【半监督学习】Match系列.1

半监督学习(SSL) 半监督学习(SSL). 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能. 即在少量样本标签的引导下, 能够充分利用大量无标签样本提高学习性能, 避免了数据资源的浪费, 同时解决了有标签样本较少时监督学习方法泛化能力不强和缺少样本标签引导时无监…

systemctl 和 service:Linux 服务管理命令的比较

systemctl 和 service&#xff1a;Linux 服务管理命令的比较 在 Linux 系统中&#xff0c;我们经常需要管理和控制系统服务。两个主要的命令用于此目的是 systemctl 和 service。尽管它们都用于管理服务&#xff0c;但它们与不同的初始化系统&#xff08;init system&#xff…

C/C++内存管理以及new/delete的底层实现。

一、C/C 内存分布 我们平常写代码所用的内存叫虚拟内存&#xff0c;是操作系统分配给每个进程的4G的内存&#xff0c;其中3G叫用户空间&#xff0c;1G叫内核空间。 我们所用的也就是3G的用户空间&#xff0c;如下图&#xff1a; 说明&#xff1a; 1. 代码段—可执行的代码/只…

bolt 代码走读 Binary.cpp -- 2

1. createBinary() 在main 函数中&#xff0c;这样调用&#xff1a; Expected<OwningBinary<Binary>> BinaryOrErr createBinary(opts::InputFilename);该函数的后面两个参数有默认值&#xff1a; Expected<OwningBinary<Binary>> createBinary(Str…