jQuery delegate()用法

jQuery delegate()用法delegate()应用场景:js动态添加元素后需要给后添加的元素绑定事件,我称它为给未来元素添加事件。其实也可以用于为指定元素的一个或多个事件绑定事件处理函数,不过我个人觉得最适合解决未来元素的事件绑定,所以下面介绍的时候我就默认绑定事件的是未来元素啦。注意:jq版本1.4.2的用法和1.4.3不一样,我先介绍1.4.2的。jQueryObject.delegate(selector,…

delegate()应用场景:js动态添加元素后需要给后添加的元素绑定事件,我称它为给未来元素添加事件。其实也可以用于为指定元素的一个或多个事件绑定事件处理函数,不过我个人觉得最适合解决未来元素的事件绑定,所以下面介绍的时候我就默认绑定事件的是未来元素啦。
注意:jq版本1.4.2的用法和1.4.3不一样,我先介绍1.4.2的。
jQueryObject.delegate( selector , events , data , hanlder )
参数说明:
jQueryObject:父元素,必须是与要绑定未来事件元素的祖先元素,可以不是直接父元素,但是必须是祖先元素(支持jq选择器)。
selector:需要绑定事件的未来元素(支持jq选择器)。
events:事件绑定,注意这里用了加s的单词,意思就是可以添加多个事件,用空格隔开就行,例如“click mouseenter mouseleave”。
data:可选参数,触发事件函数的时候可以传递给事件函数。
hanlder:事件处理函数,常用的几个地方

  • event.type:返回事件类型;
  • event.data:返回参数中传入的data值;
  • $(this):指向触发事件的对象;

贴段代码:

<!Doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
				list-style: none;
			}
			.myul{
				width: 500px;
				height: 500px;
				margin: 50px auto;
			}
			.myli{
				width: 500px;
				height: 500px;
				background: #ccc;
				display: flex;
				align-items: center;
				align-content: center;
				justify-content: center;
			}
			.mydiv{
				width: 200px;
				height: 200px;
				background: red;
			}
		</style>
	</head>
	<body>
		<ul class="myul" id="myul">

		</ul>
		<script type="text/javascript">
			setTimeout(function(){
				var li = document.createElement('li');
				var div = document.createElement('div');
				li.className = "myli";
				div.className = "mydiv";
				li.appendChild(div);
				document.getElementById('myul').appendChild(li)
			},200)//假装这是数据请求回来的延迟
			$('.myli').on('click',function(){
				alert(1)
			})//绑定失败
			$('.myul').delegate('.myli div','click mouseenter mouseleave','nihao',function(e){
			 	if(e.type == 'mouseenter'){
			 		console.log('I am mouseenter function')
			 	}else if(e.type == 'mouseleave'){
			 		console.log('I am mouseleave function')
				}else if(e.type == 'click'){
					console.log($(this))
					console.log(e.data)
				}
			})		
		</script>
	</body>
</html>

然后再介绍一下1.4.3支持的eventsMap的用法,有点像升级版
jQueryObject.delegate( selector , eventsMap, data)

var events = {
	'mouseenter': function(e){//注意,必须传e进来,不然会报错
		console.log('I am mouseenter function')
	},
	'mouseleave': function(e){
		console.log('I am mouseleave function')
	},
	'click': function(e){
		console.log($(this))
 		console.log(e.data)
	}
}
$('.myul').delegate('.myli div',events,'hahah');

当然你也可以把json对象放到delegate里面,不提出来。
大概就是这些吧 ,升级版的更高端,其实也就是帮我们简化了判断多个事件的过程,让代码看起来更规范一些,还是很好用的。

今天的文章jQuery delegate()用法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27378.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注