jQuery的事件委托

操作案例

建立一个简单的影集,影集中会显示一组照片,点击添加连接会有更多的图片

当用户把光标移动到每一张照片时,会显示对应的文字

相关html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="jquery-3.4.1.js"></script>
<style> #container{
margin: 0 auto;
width: 1000px;
background-color: #ccc;
}
#gallery>.photo>img{
height: 160px;
width: 158px;
}
#gallery{
width: 800px;
margin:0 auto;
height: 1200px;
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
align-content: space-around;
}
#gallery>.photo{
border: 9px solid #fff;
border-radius: 12px;
height: 160px;
width: 158px;
position: relative;
}
#gallery>.photo>.details{
position: absolute;
top:0;
left:0;
opacity: 0 ;
}
</style>
</head>
<body> <div id="container">
<h1>Photo Gallery</h1>
<div id="gallery"> <div class="photo">
<img src="/img/phone3.jpg" alt="">
<div class="details">
<div class="description">
amet consectetur
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
modi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone4.jpg" alt="">
<div class="details">
<div class="description">
Lorem ipsum
</div>
<div class="date">
recusandae dicta,
</div>
<div class="photographer">
elit. Hic ut velit
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone.jpeg" alt="">
<div class="details">
<div class="description">sectetur adipisicing
</div>
<div class="date">
aperiam voluptate
</div>
<div class="photographer">
dolore nisi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/flower.jpg" alt="">
<div class="details">
<div class="description">
dolor, sit
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
olore nisi
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone3.jpg" alt="">
<div class="details">
<div class="description">
amet consectetur
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
modi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone4.jpg" alt="">
<div class="details">
<div class="description">
Lorem ipsum
</div>
<div class="date">
recusandae dicta,
</div>
<div class="photographer">
elit. Hic ut velit
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone.jpeg" alt="">
<div class="details">
<div class="description">sectetur adipisicing
</div>
<div class="date">
aperiam voluptate
</div>
<div class="photographer">
dolore nisi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/flower.jpg" alt="">
<div class="details">
<div class="description">
dolor, sit
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
olore nisi
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone3.jpg" alt="">
<div class="details">
<div class="description">
amet consectetur
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
modi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone4.jpg" alt="">
<div class="details">
<div class="description">
Lorem ipsum
</div>
<div class="date">
recusandae dicta,
</div>
<div class="photographer">
elit. Hic ut velit
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone.jpeg" alt="">
<div class="details">
<div class="description">sectetur adipisicing
</div>
<div class="date">
aperiam voluptate
</div>
<div class="photographer">
dolore nisi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/flower.jpg" alt="">
<div class="details">
<div class="description">
dolor, sit
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
olore nisi
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone3.jpg" alt="">
<div class="details">
<div class="description">
amet consectetur
</div>
<div class="date">
voluptatem culpa
</div>
<div class="photographer">
modi molestias
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone4.jpg" alt="">
<div class="details">
<div class="description">
Lorem ipsum
</div>
<div class="date">
recusandae dicta,
</div>
<div class="photographer">
elit. Hic ut velit
</div>
</div>
</div>
<div class="photo">
<img src="/img/phone.jpeg" alt="">
<div class="details">
<div class="description">sectetur adipisicing
</div>
<div class="date">
aperiam voluptate
</div>
<div class="photographer">
dolore nisi molestias
</div>
</div>
</div> </div>
<a id="more-photos" href="pages/1.html">More Photos</a>
</div>
</body>
</html>

  对应的js代码: 追加数据页面

$(document).ready(function(){
var pageNum=1;
$('#more-photos').click(function(event){
event.preventDefault();
var $link=$(this);
var url=$link.attr('href');
if(url){
$.get(url,function(data){
$('#gallery').append(data);
});
pageNum++;
if(pageNum<=3){
$link.attr('href','pages/'+pageNum+'.html');
}else{
$link.remove();
}
}
});
}

      悬停时显示数据:

1 $('div.photo').on('mouseenter mouseleave',function(event){
2 var $details=$(this).find('.details');
3 if(event.type=='mouseenter'){
4 $details.fadeTo('fast',0.7);
5 }else{
6 $details.fadeOut('fast');
7 }
8 });

实现效果

出现上述问题的原因:事件处理程序只会添加到调用on()方法时已经存在的元素上。

解决以上问题的方法:事件委托

jQuery的委托方法:

     在把div.photo作为第二个参数的情况下,.on方法会把this关键字映射为#gallery中与该选择符匹配的元素
 $('#gallery').on('mouseenter mouseout','div.photo',function(event){
var $details=$(this).find('.details');
if(event.type=='mouseenter'){
$details.fadeTo('fast',0.7);
}else{
$details.fadeOut('fast');
}
})

选择委托的作用域:

    照片元素的任何祖先元素都可以作为委托的作用域   
 $(document).on('mouseenter mouseleave','div.photo',
function(event){
var $details=$(this).find('.details');
if(event.type=='mouseenter'){
$details.fadeTo('fast',0.7);
}else{
$details.fadeOut('fast');
}
});

早委托:

我们选择docoment作为委托作用域,document元素是随着页面加载

几乎立即就可以调用的,绑定在document处理程序如果放在$(document).ready()中

就要等待整个DOM构建完成才能执行绑定,使用立即被调用的函数表达式可以在整

个文档未就绪的情况下,确保所有的div.photo元素只要呈现在页面上就可以应用上

mouseover和mouseleave行为。

(function($){
$(document).on('mouseenter mouseleave','div.photo',
function(event){
var $details=$(this).find('.details');
if(event.type=='mouseenter'){
$details.fadeTo('fast',0.7);
}else{
$details.fadeOut('fast');
}
}
)
})(jQuery);

早委托的好处:

假设一个click事件绑定在一个链接上,这个事件处理程序要执行

某些操作,同时要阻止链接的默认行为。如果等文档就绪之后,再绑定它,那很可能

在绑定处理程序之前用户已经点击该链接离开了当前页面。

jQuery的高级事件处理的更多相关文章

  1. 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one

    jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...

  2. 译:DOM2中的高级事件处理(转)

    17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2)        译自:JavaScript: The Definitive Gu ...

  3. Jquery remove 高级用法

    Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...

  4. jQuery基础之事件处理

    jQuery基础之事件处理方法,如下图: 代码实现: <script src="JS/jquery-1.12.4.min.js"></script> < ...

  5. jQuery中的事件处理

    1.页面载入完毕响应事件所谓页面载入完毕是指DOM元素载入就绪了,能够被读取和操作了.①jQuery中的$(doucument).ready()事件ready(fn)是jQuery事件模块中最重要的一 ...

  6. jquery事件之事件处理函数

    一.事件处理 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) Bind( 为每一个匹配元素的特定事件(像click)绑定一个事件处 ...

  7. JQuery学习高级

    ## 今日内容:     1. JQuery 高级         1. 动画         2. 遍历         3. 事件绑定         4. 案例         5. 插件 ## ...

  8. jquery 选择器 -高级使用 新的 心得

    jQuery的each函数: each函数等同于c语言中的for函数: 里面每次循环的 "context 上下文" == 当前的dom ,可以使用this, 也可以使用$(this ...

  9. jQuery动画高级用法(上)——详解animation中的.queue()动画队列插队函数

    决定对animate方面做一些总结,希望能给大家一些启发和帮助 从一个实际应用谈起 今天不谈animate().fadeIn().fadeOut().slideUp().show().hide()诸如 ...

  10. jQuery Grid高级指南

    上周以为已经把jqgrid 表格这部分已经搞得差不多了,没想到在实际用的时候,出现了不少问题,重新把这块知识整理一下. 问题一:设置表格的自动刷新 问题的原因: 使用表格自带的增删改查的功能,编辑完数 ...

随机推荐

  1. 从传统搜索到智能问答:自研 RAG 系统的技术实践与工程落地

    一.引言 在数字化转型浪潮下,企业知识服务体系正经历着深刻变革.如何让用户高效获取所需信息,成为提升产品竞争力和用户满意度的关键.葡萄城作为企业级开发工具与解决方案提供商,长期致力于知识服务体系的建设 ...

  2. SecureCRT 8.5 配置自动记录日志

    两种方式记录日志 1.手动记录日志 文件--会话日志 选择需要保存的位置和文件名 2.全局自动记录所有日志 选项--全局选项 常规--默认会话--编辑默认设置 类别--终端--日志文件 配置日志文件名 ...

  3. Apache JMeter压力测试工具的安装与使用

    官网下载 https://jmeter.apache.org/download_jmeter.cgi 然后解压即可 运行 双击bin/jmeter.bat 汉化 在软件里选择语言重启就会还原,所以这里 ...

  4. 启智树提高组day3T1 3479 : A:climb 树

    启智树提高组day3T1 3479 : A:climb 树 题目描述 DoubleDuck山是X省的著名旅游景点.这一天,淘淘慕名而来,打算爬到山顶处. DoubleDuck山的构造是十分特殊的.在这 ...

  5. [译]MIT6.824_1.1分布式系统介绍——驱动力与挑战

    这是6.824分布式系统课程,我会开始用简明的介绍我所认为的分布式系统. 分布式系统的核心是通过网络以完成一致任务的一组协作计算机. 因此我们将在本课程中重点介绍各种实例,例如大型网站的存储或MapR ...

  6. async与defer的区别

    `async` 和 `defer` 是两种不同的JavaScript特性,它们的主要区别在于它们的执行顺序和时间点. `async` 意味着函数或代码块会被异步执行.当浏览器遇到带有 `async` ...

  7. 18.Java源码分析系列笔记-JDK1.8的ConcurrentHashMap

    目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. 构造方法 3.1.1. Node 3.2. put方法[有加锁] 3.2.1. 计算key的hash 3.2.2. 死循环 3.2.3. ...

  8. k8s一、基本概念

    目录 Kubernetes的设计架构 Master Node 组件简的基本交互流程 Kubernetes的核心对象 Pod 控制器 Replication Controller 和 ReplicaSe ...

  9. Blazor学习之旅(9)用MudBlazor重构Todo

    大家好,我是Edison. 在之前的学习之旅(3)开发一个Todo应用中,我们开发了一个简单版的Todo,这次我们基于MudBlazor来重构这个Todo应用. Todo V1回顾 在Blazor入门 ...

  10. 好用的文档工具👉smart-doc

    好用的文档工具smart-doc smart-doc不得不说是一款非常好用的文档工具,尤其是它几乎不与项目耦合的特性十分值得所有java开发人员日常使用它~ 之前及现在用的 我从事开发以来,用过形形色 ...