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