事件处理(一):bind()、live()、delegate()、on()、one(),以及对应的注销事件

事件基础

绑定事件
注:在事件处理函数中要通过event对象来访问data属性,见on方法的例子
1、bind()
bind()方法为匹配元素添加一个或多个事件处理器

bind(event,data,function)

event:必须参数,添加到元素的一个或多个事件
单事件处理:如$(selector).bind(‘click’,data,function)
多事件处理:
1、需要使用空格分隔多个事件,如$(selector).bind(‘click mouseout’,data,function),这种方式比较死板,适合多个事件调用同一函数的情况
2、大括号语法灵活定义多个事件,如$(selector).bind({event1:function,event2:function}),可以给事件单独绑定函数
data:可选参数,设计需要传递的参数
function:必须参数,当绑定事件发生时,需要执行的函数

例:使用bind为按钮绑定事件的几种方式

	<body>
		<button type="button" class="btn-test">按钮</button>
		<div class="container">
			<img src="../img/02.jpg" style="width: 300px;height: 200px;">
		</div>
		<script type="text/javascript">
			$(function() {
				/* 添加单个事件处理 */

				/* $('.btn-test').bind('click',function(){
					$('.container').slideToggle(); 
				}) */

				/* 添加多个事件处理 */
				/* $('.btn-test').bind('click mouseout',function(){
					$('.container').slideToggle();
				}) */

				/* 添加多个事件处理*/
				$('.btn-test').bind({
					'click': function() {
						$('.container').slideToggle();
					},
					'mouseout': function() {
						alert('这是鼠标移出事件')
					}
				})
			})
		</script>
	</body>

注: bind()方法适合所有版本,jQuery1.7以后,推荐使用on()方法代替

2、 live()
live()方法为当前或未来的匹配元素添加一个或多个事件处理程序,
特点:由脚本创建的新元素也会拥有该事件

live(event,data,function)

参数说明与bind相同
注: jQuery1.9及以上删除了该方法,用on()方法来代替

3、delegate()
delegate()方法为指定的元素,以及被选元素的子元素,添加一个或多个事件处理程序。该方法使用于当前或未来的元素,
特点:由脚本创建的新元素也会拥有事件

delegate(childSelector,event,data,function)

参数说明:
childSelector:必须参数,指定需要注册事件的元素,一般为调用对象的子元素(直接写元素标签名,否则会出问题)
event:必须参数,添加到元素的一个或多个事件
data:可选参数,设计需要传递的参数
function:必须参数,当绑定事件发生时,需要执行的函数
注: 该方法适合jQuery1.4.2及以上及版本3以下

例:设计一个项目列表,当单击按钮时,可以动态添加列表项目,使用delegate()方法为每个li标签绑定click事件,单击时将弹出该列表项目包含的文本(新添加的列表项也要拥有click事件)

<body>
	<button id="btn">添加列表项目</button>
	<ul id="list">
		<li>列表项目1</li>
		<li>列表项目2</li>
		<li>列表项目3</li>
	</ul>
	<script type="text/javascript">
		$(function() {
			$('#list').delegate('li', 'click', function() {
				alert(this.innerHTML)
			})
			$('#btn').click(function() {
				$('#list').append('<li>列表项目' + ($('#list').children().length + 1) + '</li>')
			})
		})
	</script>
</body>

4、on()

on(event,childSelector,data,function)

event:必须参数项;childSelector:可选参数项;data:可选参数项;function:必须参数项

on()方法是jQuery1.7及以上用于替代bind、live、delegate的方法

例:如何向事件处理函数传递数据

<body>
	<button>输出</button>
	<script type="text/javascript">
		$(function() {
			$('button').on('click', {
				'a': 'A',
				'b': 'B'
			}, function(event) {  //通过event对象来访问data属性
				alert(event.data.a + event.data.b)
			})
		})
	</script>
</body>

总结:
1、都支持单元素多事件的绑定,都支持空格相隔方式或者大括号替代方式
2、均是通过事件冒泡方式,将事件传递到document进行事件的响应
3、如果项目中引用jQuery为低版本,推荐使用delegate(),高版本可以使用on(),jQuery3+版本中只支持on()

绑定一次性事件
one()是on()的一个特例,用法与bind()完全相同,但是它绑定的事件在执行一次响应之后就会失效

one(event,[data],function)

注销事件
jQuery提供了四种事件绑定方式:bind()、live()、delegate()、on(),对应的注销事件分别为:unbind()、die()、undelegate()、off()
注销方法与注册方法是相反操作,参数和用法基本相同。它们能够从没一个匹配的元素中删除绑定的事件。如果没有指定参数,则删除所有绑定的事件,包括注册的自定义事件

发布了78 篇原创文章 · 获赞 7 · 访问量 3387

猜你喜欢

转载自blog.csdn.net/weixin_41897680/article/details/104618385