jQuery的4种绑定方法
一、bind()与unbind()
I、bind():绑定
1、定义
规定向被选元素添加的一个或多个事件处理程序,以及当事件发生时运行的函数。
2、语法
$(selector).bind(event,data,function)
3、参数
参数 | 描述 |
---|---|
event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。如click(点击)、change(改变)、mouseover(鼠标移入/鼠标浮上)等事件 |
data | 可选。规定传递到函数的额外数据。 |
function | 必需。规定当事件发生时运行的函数。 |
4、案例
(1)绑定单一事件
给id为trigger的元素绑定click事件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<script type="text/javascript">
$("#trigger").bind('click',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:点击“绑定事件”后出现弹窗
(2)绑定多个事件
给id为trigger的元素同时绑定click和mouseover事件【多个事件之间用空格隔开】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<script type="text/javascript">
$("#trigger").bind('click mouseover',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:鼠标移入与点击“绑定事件”后均会出现弹窗
II、unbind():解绑
1、定义
规定从指定元素上删除的一个或多个事件处理程序。如果没有规定参数,unbind() 方法会删除指定元素的所有事件处理程序。ubind() 适用于任何通过 jQuery 附加的事件处理程序。
2、语法
$(selector).unbind(event,function)
3、参数
参数 | 描述 |
---|---|
event | 可选。规定删除元素的一个或多个事件,由空格分隔多个事件值。如果只规定了该参数,则会删除绑定到指定事件的所有函数。 |
function | 可选。规定从元素的指定事件取消绑定的函数名。 |
4、案例
(1)解绑具体事件
解绑“鼠标移入”事件:执行“解绑事件”后,“鼠标移入”事件失效,但“点击”事件依然有效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$("#trigger").bind('click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$("#trigger").unbind('mouseover');
alert("已解绑");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入“绑定事件”时没反应,但点击“绑定事件”时出现弹窗
(2)解绑全部事件
解绑全部事件:执行“解绑事件”后,“鼠标移入”与“点击”事件均失效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$("#trigger").bind('click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$("#trigger").unbind();
alert("已解绑全部");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入和点击“绑定事件”时均没反应
二、live()与die()
I、live():绑定
1、定义
规定
向被选元素添加的一个或多个事件处理程序,以及当事件发生时运行的函数。live() 方法在 jQuery 版本 1.7 中被废弃,在版本 1.9 中被移除。
2、语法
$(selector).live(event,data,function)
3、参数
参数 | 描述 |
---|---|
event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。如click(点击)、change(改变)、mouseover(鼠标移入/鼠标浮上)等事件 |
data | 可选。规定传递到函数的额外数据。 |
function | 必需。规定当事件发生时运行的函数。 |
4、案例
此处可发现,我多引用了一个js文件,这也是已废弃的方法为何还能使用的原因(点击了解详情)
(1)绑定单一事件
给id为trigger的元素绑定click事件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<script src="js/jquery-migrate-1.1.1.min.js" type="text/javascript"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<script type="text/javascript">
$("#trigger").live('click',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:点击“绑定事件”后出现弹窗
(2)绑定多个事件
给id为trigger的元素同时绑定click和mouseover事件【多个事件之间用空格隔开】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<script type="text/javascript" src="js/jquery-migrate-1.1.1.min.js"></script>
<div style="height: 300px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">避免点击事件的多次触发</a>
<script type="text/javascript">
$("#trigger").live('click mouseover',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:鼠标移入与点击“绑定事件”后均会出现弹窗
II、die():解绑
1、定义
规定从指定元素上删除的一个或多个事件处理程序。如果没有规定参数,unbind() 方法会删除指定元素的所有事件处理程序。
2、语法
$(selector).die(event,function)
3、参数
参数 | 描述 |
---|---|
event | 可选。规定删除元素的一个或多个事件,由空格分隔多个事件值。如果只规定了该参数,则会删除绑定到指定事件的所有函数。 |
function | 可选。规定从元素的指定事件取消绑定的函数名。 |
4、案例
(1)解绑具体事件
解绑“鼠标移入”事件:执行“解绑事件”后,“鼠标移入”事件失效,但“点击”事件依然有效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<script src="js/jquery-migrate-1.1.1.min.js" type="text/javascript"></script>
</style>
<div style="height: 500px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$("#trigger").live('click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$("#trigger").die('mouseover');
alert("已解绑");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入“绑定事件”时没反应,但点击“绑定事件”时出现弹窗
(2)解绑全部事件
解绑全部事件:执行“解绑事件”后,“鼠标移入”与“点击”事件均失效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<script src="js/jquery-migrate-1.1.1.min.js" type="text/javascript"></script>
</style>
<div style="height: 500px;width: 200px;background-color: green"></div>
<a href="#" id="trigger">绑定事件</a>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$("#trigger").live('click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$("#trigger").die();
alert("已解绑全部");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入和点击“绑定事件”均无效果
三、delegate()与undelegate()
I、delegate():绑定
1、定义
为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。适用于当前或未来的元素(比如由脚本创建的新元素,即动态生成的元素)。
2、语法
$(selector).delegate(childSelector,event,data,function)
3、参数
参数 | 描述 |
---|---|
childSelector | 必需。规定要添加事件处理程序的一个或多个子元素。 |
event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。如click(点击)、change(改变)、mouseover(鼠标移入/鼠标浮上)等事件 |
data | 可选。规定传递到函数的额外数据。 |
function | 必需。规定当事件发生时运行的函数。 |
4、案例
(1)绑定单一事件
给div下的a标签绑定click事件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<script type="text/javascript">
$('div').delegate('a','click',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:点击“绑定事件”后出现弹窗
(2)绑定多个事件
给div下的a标签同时绑定click和mouseover事件【多个事件之间用空格隔开】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<script type="text/javascript">
$('div').delegate('a','click mouseover',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:鼠标移入与点击“绑定事件”后均会出现弹窗
II、undelegate():解绑
1、定义
删除由 delegate() 方法添加的一个或多个事件处理程序。必须是由delegate绑定的方法才有效噢
2、语法
$(selector).undelegate(selector,event,function)
3、参数
参数 | 描述 |
---|---|
selector | 可选。规定需要删除事件处理程序的选择器。 |
event | 可选。规定需要删除处理函数的一个或多个事件类型。 |
function | 可选。规定要删除的具体事件处理函数。 |
4、案例
(1)解绑具体事件
解绑“鼠标移入”事件:执行“解绑事件”后,“鼠标移入”事件失效,但“点击”事件依然有效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$('div').delegate('a','click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$('div').undelegate('a','click');
alert("已解绑全部事件");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入“绑定事件”时没反应,但点击“绑定事件”时出现弹窗
(2)解绑全部事件
解绑全部事件:执行“解绑事件”后,“鼠标移入”与“点击”事件均失效
注意解绑的格式,不能写子元素,且会解绑所有子元素事件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$('div').delegate('a','click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$('div').undelegate();
alert("已解绑全部事件");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入和点击“绑定事件”均无反应
四、on()与off()
I、on():绑定
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
1、定义
在被选元素或其子元素上添加一个或多个事件处理程序。使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素,即动态生成的元素)。超级厉害的方法,元素本身与其子元素均适用
2、语法
$(selector).on(event,childSelector,data,function)
3、参数
参数 | 描述 |
---|---|
event | 必需。规定要从被选元素添加的一个或多个事件或命名空间。由空格分隔多个事件值,也可以是数组。必须是有效的事件。如click(点击)、change(改变)、mouseover(鼠标移入/鼠标浮上)等事件 |
childSelector | 可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。 |
data | 可选。规定传递到函数的额外数据。 |
function | 必需。规定当事件发生时运行的函数。 |
4、案例
由于涉及到当前与子元素和单一和多个事件情况,案例详情太多,不再一一列举,具体案例可参考以上进行照葫芦画瓢,此处仅做2种情况演示,如下所示
(1)绑定单一事件
给div下的a标签绑定click事件【注意语法格式噢,先方法再元素】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<script type="text/javascript">
$('div').on('click','a',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:点击“绑定事件”后出现弹窗
(2)绑定多个事件
给id为trigger的元素同时绑定click和mouseover事件【多个事件之间用空格隔开】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;"></div>
<a href="#" id="trigger">绑定事件</a>
<script type="text/javascript">
$('#trigger').on('click mouseover',function(){
alert("哇哈哈哈");
});
</script>
</body>
</html>
效果:鼠标移入与点击“绑定事件”后均会出现弹窗
II、off():解绑
自 jQuery 版本 1.7 起,off() 方法是 unbind()、die() 和 undelegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
1、定义
通常用于移除通过 on() 方法添加的事件处理程序。只能是on绑定的方法才有效噢
2、语法
$(selector).off(event,selector,function(eventObj),map)
3、参数
参数 | 描述 |
---|---|
event | 必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值。必须是有效的事件。 |
selector | 可选。规定添加事件处理程序时最初传递给 on() 方法的选择器。 |
function(eventObj) | 可选。规定当事件发生时运行的函数。 |
map | 规定事件映射 ({event:function, event:function, …}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
4、案例
由于涉及到当前与子元素和单一和多个事件情况,案例详情太多,不再一一列举,具体案例可参考以上进行照葫芦画瓢,此处仅做2种情况演示,如下所示
(1)解绑具体事件
解绑div下a标签的“鼠标移入”事件:执行“解绑事件”后,“鼠标移入”事件失效,但“点击”事件依然有效【注意语法格式噢,先方法再元素】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;">
<a href="#" id="trigger">绑定事件</a>
</div>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$('div').on('click','a',function(){
alert("哇哈哈哈");
});
function untri(){
$('div').off('click','a');
alert("已解绑div下a标签的点击事件");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入“绑定事件”时没反应,但点击“绑定事件”时出现弹窗
(2)解绑全部事件
解绑全部事件:执行“解绑事件”后,“鼠标移入”与“点击”事件均失效
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止多次点击</title>
<script type="text/javascript" src="js/jquery-2.1.1.js"></script>
<div style="height: 300px;width: 200px;background-color: pink;padding:50px;"></div>
<a href="#" id="trigger">绑定事件</a>
<a href="#" onclick="untri()">解绑事件</a>
<script type="text/javascript">
$('#trigger').on('click mouseover',function(){
alert("哇哈哈哈");
});
function untri(){
$('#trigger').off();
alert("已解绑trigger的全部事件");
}
</script>
</body>
</html>
效果:执行“解绑事件”后,鼠标再次移入和点击“绑定事件”时均无效
总结
以上就是jQuery绑定与解绑事件的4种方法,自 jQuery 版本 1.7 起,on() 和 off() 方法是在元素上添加和移除事件处理程序的首选方法。