jQuery delegate()用法

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里面,不提出来。
大概就是这些吧 ,升级版的更高端,其实也就是帮我们简化了判断多个事件的过程,让代码看起来更规范一些,还是很好用的。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值