从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......
- github:https://github.com/Daotin/Web
- 微信公众号:Web前端之巅
- 博客园:http://www.cnblogs.com/lvonve/
- CSDN:https://blog.csdn.net/lvonve/
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

一、为元素绑定多个相同事件
1、方式一
$("#btn").click(function () {
console.log("click1");
}).click(function () {
console.log("click2");
}).click(function () {
console.log("click3");
});
2、方式二
$("#btn").bind("click",function () {
console.log("bind:click1");
}).bind("click",function () {
console.log("bind:click2");
}).bind("click",function () {
console.log("bind:click3");
});
注意:下面使用 bind 对象的方式,只会执行最后一个相同的绑定事件。
$("#btn").bind({
"click": function () {
console.log("bind-obj:click1");
}, "click": function () {
console.log("bind-obj:click2");
}, "click": function () {
console.log("bind-obj:click3");
}
});
二、元素绑定事件的区别
先说结论:通过调用事件名的方式和 bind 的方式只能绑定之前存在的元素,后添加的元素不能绑定事件;而 delegate 和 on 的方式绑定元素的方式可以。
示例1:
// 事件名
$("#btn").click(function () {
$("#dv").append($("<p>p标签</p>"));
$("p").click(function () {
alert("p被点了");
});
$("#dv").append($("<p>p标签2</p>"));
});
// bind
$("#btn").click(function () {
$("#dv").append($("<p>p标签</p>"));
$("p").bind("click", function () {
alert("p被点了");
});
$("#dv").append($("<p>p标签2</p>"));
});
点击 p标签2 的时候不会弹出对话框。
示例2:
// delegate
$("#btn").click(function () {
$("#dv").append($("<p>p标签</p>"));
$("#dv").delegate("p", "click", function () {
alert("p被点了");
});
$("#dv").append($("<p>p标签2</p>"));
});
// on
$("#btn").click(function () {
$("#dv").append($("<p>p标签</p>"));
$("#dv").on("click", "p", function () {
alert("p被点了");
});
$("#dv").append($("<p>p标签2</p>"));
});
后添加的 p 标签也会被绑定点击事件。
三、解绑事件
用什么方式绑定的事件,最好用什么方式解绑事件。
1、bind 解绑事件
语法:
// 解绑单个或多个事件
绑定事件的元素.unbind("事件名1 事件名2 ...");
// 解绑所有的事件
绑定事件的元素.unbind();
PS:unbind 也可以解绑
元素.事件名(事件处理函数)方式的绑定事件。
2、delegate 解绑事件
语法:
// 解绑子元素单个或多个事件
父元素.undelegate("子元素", "事件1 事件2 ...");
// 解绑子元素的所有事件
父元素.undelegate();
下面的写法是无效的:
父元素.undelegate("子元素");,不能移除子元素的所有事件。
3、on 解绑事件
语法:
// 父元素和子元素的所有事件都会解绑
父元素.off();
// 父元素和子元素的单个或多个事件解绑
父元素.off("事件1 事件2 ...");
// 子元素的所有事件解绑
父元素.off("", "子元素");
// 子元素的单个或多个事件解绑
父元素.off("事件1 事件2 ...", "子元素");
// 父元素中所有的子元素的所有事件解绑
父元素.off("", "**");
// 父元素中所有的子元素的单个或多个事件解绑
父元素.off("事件1 事件2 ...", "**");
注意:子元素的所有事件解绑 。下面的写法是无效的。
父元素.off("子元素");

从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件的更多相关文章
- 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(三)元素操作,链式编程,动画方法
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(五)操作元素其他属性,为元素绑定事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(四)元素的创建添加与删除,自定义属性
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(一)jQuery的概念,页面加载事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 jQuery(八)each,多库共存,包装集,插件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- jquery绑定事件,解绑事件
unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件.如果没有参数,则删除所有绑定的事件.你可以将你用bind()注册的自定义事件取消绑定.如果提 ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
随机推荐
- [leetcode]67. Add Binary 二进制加法
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- Jmeter获取redis数据
背景:jmeter写注册登录接口时,需要获取验短信验证码,一般都是存在数据库,但我们的开发把验证码存到redis里面了 步骤:1.写个redis工具类 2.打成jar包,导入jmeter lib\ex ...
- linux获取当前系统的时间
#include <time.h> #include <sys/time.h> void sysLocalTime(char *str_info) { time_t times ...
- 洛谷1345 [USACO5.4]奶牛的电信Telecowmunication
原题链接 最小割点数转换成最小割边数的模板题(不过这数据好小). 每个点拆成两个点,连一条容量为\(1\)的边,原图的边容量定为\(+\infty\),然后跑最大流即可. 这里用的是\(Dinic\) ...
- 网络传输 buf 封装 示例代码
网络传输 buf 封装 示例代码 使用boost库 asio // BufferWrapTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&quo ...
- IoGetRelatedDeviceObject学习
PDEVICE_OBJECT IoGetRelatedDeviceObject( IN PFILE_OBJECT FileObject ) /*++ Routine Description: This ...
- window 安装mysql
常见错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 密码输入错误:无法远程 ...
- Netsharp总体设计
阅读本文请先阅读如下两篇文章 什么是企业软件 Netsharp什么 Netsharp总体设计 1.1 Netsharp终端形式 Netsharp基于.NET平台,支持的产品形态有三种: 北极熊 ...
- 关于session共享
最近在银行部署项目,一台Nginx做负载均衡,两台Tomcat,两台Oracle互备,一台ftp文件服务器.Tomcat涉及到session共享问题,所以就在这里做一下总结. 首先关于session ...
- mysql---select的五种子句学习(where、group by、having、order by、limit)
mysql---select的五种子句学习(where.group by.having.order by.limit) 分类: Mysql学习2012-09-27 16:14 1533人阅读 评论 ...