jQuery的.live()和.die()

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

很多开发者都知道jQuery的.live()方法,他们大部分知道这个函数做什么,但是并不知道是怎么实现的,所以用的并不那么舒适。而且他们却从未听过还有解除绑定的.live()事件的.die()方法。即使你熟悉这些,但是你意识到.die()了吗?

什么是 .live()

.live方法类似于.bind(),除此之外,它允许你将事件绑定到DOM元素上,可以将事件绑定到DOM中还不存在的元素上,看看下面的例子:

比方说当用户在点击链接时及想提示他们正在离开站点。

?
1
2
3
4
5
6
$(document).ready(function() {
$('a').click(function() {
alert("You are now leaving this site");
return true;
});
});

注意,.click()仅仅是个实现更一般.bind()的简单方法,下面和上面的代码相当于上面的实现。

?
1
2
3
4
5
6
$(document).ready(function() {
$('a').bind('click',function() {
alert("You are now leaving this site");
return true;
});
});

但是现在通过javascript添加一个链接到页面。

?
1
$('body').append('<div><a href="...">Check it out!</a></div>');

然而当用户点击那个链接是,方法将不会被调用,因为那个链接当你将click事件绑定到页面的所有<a>节点时还并不存在,所以我们就用.live()替换.bind():

?
1
2
3
4
5
6
$(document).ready(function() {
$('a').live('click',function() {
alert("You are now leaving this site");
return true;
});
});

现在如果你添加一个新的链接到页面上,绑定就也可以运行了。

.live() 如何工作

.live()背后神奇的地方就在于它并不将事件绑定到你选定的elements上,而实际上是绑定到了DOM树的跟节点(例子中是$(document)),而是在element中就像一个参数一样进行传递。

那么当你点击一个元素时,click事件就会在DOM树上往上传递,直至到达根节点。这个.click()事件的触发器已经在根节点被.live()创建。这个触发方法将首先检测被点击的目标看是否和.live()调用的选择器相匹配。所以上面的例子中,会检查点击的元素是否和$('a').live()中的$('a')相匹配,如果匹配,那么绑定的方法就会执行了。

因为不管你在根节点内点击了什么,根节点的.click()事件都会被触发,当你点击加入到根节点的任何元素时这个检查都会发生。

所有.live() 都可以.die()

如果你知道.bind(),那么你肯定知道.unbind()。那么,.die()和.live()就是类似的关系了。为了接触上面的绑定(不希望用户点击链接时弹出对话框),我们这么做:

?
1
$('a').die();

更具体点,如果还有其他的事件被绑定且需要保留,例如hover或其他,可以只解除click事件绑定。

?
1
$('a').die('click');

再具体些,如果已经定义了方法名,可以解除绑定指定的方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
specialAlert =function() {
alert("You are now leaving this site");
return true;
}
$(document).ready(function() {
$('a').live('click', specialAlert );
$('a').live('click', someOtherFunction );
});
// then somewhere else, we could unbind only the first binding
$('a').die('click', specialAlert );

关于 .die()的问题

使用这些函数时,.die()方法会有一个缺点。只可以使用.live()方法中用到的元素选择器,例如,不可以像下面这样写:

?
1
2
3
4
5
6
7
8
9
10
$(document).ready(function() {
$('a').live('click',function() {
alert("You are now leaving this site");
return true;
});
});
// it would be nice if we could then choose specific elements
//   to unbind, but this will do nothing
$('a.no-alert').die();


.die()事件看起来好像是匹配到了目标选择权并解除了.live()的绑定,但事实上,$('a.no-alert')并不存在绑定,所以jquery找不到任何绑定去去掉,就不会起作用了。

更糟的是下面这个:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
$(document).ready(function() {
$('a,form').live('click',function() {
alert("You are going to a different page");
return true;
});
});
// NEITHER of these will work
$('a').die();
$('form').die();
// ONLY this will work
$('a,form').die();

如何修复 .die()

在我下篇文章中,我将会建议一种.die()执行的新方法,它可以提供一个向后兼容的语气的行为。或许我有时间的话会去建议jQuery核心开发团队在下一个release中接受我的建议并进行修改,希望多一点我刚写的这些方法,包括可选的context参数,允许自定义事件附加的节点,而不是根节点。

如果想得到更多的信息和例子,可以查查jQuery .live() and .die().的文档

同时注意下 .delegate() 和.undelegate(),他们可以替代.live()和.die(),它们联系很紧密。

转载于:https://my.oschina.net/u/861770/blog/102956

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简洁强大的JavaWeb框架Blade

English Blade是什么? blade 是一个轻量级的MVC框架. 它拥有简洁的代码&#xff0c;优雅的设计。 如果你喜欢,欢迎 Star and Fork, 谢谢! 特性 [x] 轻量级。代码简洁,结构清晰,更容易开发[x] 模块化(你可以选择使用哪些组件)[x] 插件扩展机制[x] Restful风格的路由接口[x] 多种…

SQL SERVER 数据压缩

从SQL SERVER 2008开始&#xff0c;SQL SERVER 提供了对数据进行压缩的功能&#xff0c;启用数据压缩无须修改应用程序。 数据压缩可有效减少数据的占用空间&#xff0c;读取和写入相同数据花费的IO也响应减少&#xff0c;从而可以有效缓解IO压力&#xff0c;但由于数据在读取和…

C语言基本数据类型short、int、long、char、float、double

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程 1.概述 C 语言包含的数据类型如下图所示 2.各种数据类型介绍 2.1整型 整形包括短整型、整形和长整形。 2.1.1短整形 short a=1; 2.1.2整形 一般占4个字节(32位),…

是的,我打败了一个奥特曼。

全世界只有3.14 % 的人关注了爆炸吧知识春节将至&#xff0c;超模君给各位带来了春节好礼——《数学之旅闪耀人类的54位数学家》文化礼盒&#xff0c;集结阿基米德、欧几里得、芝诺、高斯、欧拉等54位数学家&#xff0c;跨越2600年的数学之旅&#xff0c;为各位新一年的学习之旅…

你有多少个前男友?

1 给我整不会了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 这是送分题还是送命题&#xff1f;▼3 有梦想谁都了不起&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 &#xff1f;&#xff1f;&#xff08;via.偷听bot&#xff0c;侵删&#xff09;…

里程碑!中文版.NET官网发布,.NET开发起飞!

重磅官宣&#xff0c;微软.NET官网正式发布简体中⽂版&#xff0c;而且是官方支持语言第一梯队&#xff0c;由此可见微软对中国.NET市场的重视。这些年&#xff0c;微软一直在加大.NET在中国的支持和推广&#xff0c;努力让更多传统行业、互联网公司、创业团队的中国开发者选择…

来一个可能防止恶意采集和爬虫的SH

没办法&#xff0c;公司的要求&#xff0c;还有&#xff0c;一些山寨爬虫完全不够我们运维人员的感觉&#xff0c; 一天爬虫搞个三四十万的LOG&#xff0c;那我只好干了。。 人家GOOGLE&#xff0c;BAIDU&#xff0c;一天大约也就五六千吧。。 有一个小的SSH技巧&#xff0c;是…

面对焦虑,我们能做什么?

全世界只有3.14 % 的人关注了爆炸吧知识你在犹豫&#xff0c;你在抱怨&#xff0c;你埋怨这个社会的不公平&#xff1b;你埋怨自己的运气不好&#xff0c;你埋怨付出了得不到结果。其实你只是还不够努力。从此刻起开始改变自己一切还来得及。从现在开始&#xff0c;你有多努力就…

验证规则构建神器 FluentValidation.md

上一篇文章《MediatR在.NET应用中的实践》中&#xff0c;我们在讲MediatR的管线内容时&#xff0c;提到过可以在管线中增加 Command/Query 的验证。今天我来带领大家了解一个.NET技术领域中很「流行」的强类型验证规则构建库&#xff1a;FluentValidation。FluentValidation 简…

基本排序算法一

一 选择排序 原理&#xff1a;选择排序很简单&#xff0c;他的步骤如下&#xff1a; 从左至右遍历&#xff0c;找到最小(大)的元素&#xff0c;然后与第一个元素交换。从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&#xff0c;然后与第二个元素进行交换。以此…

老大爷的手法一看就不一般!

1 超市门口的双枪老大爷▼2 小朋友&#xff1a;谢邀&#xff0c;人在机场&#xff0c;刚下飞船▼3 向你保证这真的是一副刺绣作品▼4 外国最新挑战【我打我自己接力】▼5 疫情期间在家隔离的健身人士们快要被逼疯了▼6 给大家表演一个大变活人吧▼7 家有神兽的家长最近一…

Gamebryo实例学习之二BackgroundLoad

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 后台加载允许应用程序以一个优先级低于主线程的后台线程来加载NIF文件。这个程序演示了如何使用BackgroundLoad后台加载。 二、解析 程序继承了实例基类NiSample。 CallbackStream继…

WPF 实现圣诞树

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&#xff08;需备注WPF开发者&#xff09;PS&#xff1a;有更好的…

sdut2784cf 126b Good Luck!(next数组)

链接 next数组的巧妙应用 学弟出给学弟的学弟的题。。 求最长的 是前缀也是后缀同时也是中缀的串 next的数组求的就是最长的前后缀 但是却不能求得中缀 所以这里 就把尾部去掉之后再求 这样就可以保证是中缀了 先把所有既是前缀也是后缀的长度的求出来标记 然后再去掉尾部 求…

聊一聊基于Nacos的metadata完成服务间的AB测试

背景 在很多时候&#xff0c;产品同学或其他 boss 会有一些想法&#xff0c;或好或坏&#xff0c;都会想放到线上环境去验证&#xff0c;看看能不能带来更好的效果。这其实就是一个提出假设和验证假设的过程&#xff0c;而 AB 测试&#xff0c;是验证假设的好方法。对于服务之间…

豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片的一大重要意义&#xff0c;就在于它能将我们的视野和脚步&#xff0c;引向我们无法企及的地方和领域&#xff0c;又能让那些我们曾经到过的地方、经历过的人事&#xff0c;变得更有深意。今天&#xff0c;就给大家分享7部顶级纪录…

旅游社交网站 游范儿

为什么80%的码农都做不了架构师&#xff1f;>>> 应用名称&#xff1a;旅游社交网站 游范儿 应用URL地址&#xff1a;http://tumi.cloudfoundry.com/ 应用说明及使用场景&#xff1a; 用于爱好旅游的人士&#xff0c;发游记&#xff0c;以及所见所闻&#xff0c;…

nginx源码学习Unix - Unix域协议

说到什么是域协议就会出现这么个解释&#xff1a; UNIX域协议并不是一个实际的协议族&#xff0c;而是在单个主机上执行客户/服务器通信的一种方法&#xff0c;所用API与在不同主机上执行客户/服务器通信所使用的API相同。UNIX域协议可以视为IPC方法之一。 我们白话解释下Unix域…

oracle12c考试内容,12c ocp考试内容

oca1z0-047(Oracle Database SQL Expert 1Z0-047) 60个题&#xff0c;90分钟&#xff0c;66%过关。/1z0-051(Oracle Database 11g: SQL Fundamentals I 1Z0-051) 64个题&#xff0c;120分钟&#xff0c;60%过关。/1z0-061(Oracle Database 12c: SQL Fundamentals 1Z0-061) 75个…

微软开源的Web测试和自动化神器 Playwright

Playwright 是微软开源的一个用于 Web 测试和自动化的框架, 提供了可靠的端到端测试, 功能非常强大, 可以在测试, 爬虫&#xff0c;自动化场景中使用。跨浏览器Playwright 支持所有现代的渲染引擎&#xff0c;包括 Chromium、WebKit 和 Firefox。跨平台在 Windows, Linux 和 ma…