前端提高篇(九十六):jQuery事件高级使用及事件委托,Context都没弄明白凭什么拿高薪

46 阅读2分钟

//上面的点击事件,效果相当于:

$(‘li’).on(‘click’, function(){

console.log( $(this).text());

})

1.2 on(事件, 执行子元素,事件处理函数)

当我添加一个按钮,点击按钮时,添加li,按钮的功能写在绑定点击事件的后面,就像这样:

在这里插入图片描述

效果:

新add的li没有被绑定上点击事件,

原因:因为文档从上到下解析,给原来的3个li绑定点击事件的代码先运行了,后面才动态新增的li

所以,就要用到事件委托,将事件委托给父元素,当子元素的事件被触发时,由于没有处理程序,会冒泡给父元素,让父元素来处理

//用事件委托

$(‘ul’).on(‘click’, ‘li’, function(){

console.log( $(this).text());

})

这样,即使button动态生成li的代码在后面,点击动态新增的li时,也能输出li对应的文本了

在这里插入图片描述

有关动态生成的元素的事件绑定,均需考虑委托

1.3 on(事件, 执行子元素,数据,事件处理函数)

还可以传递额外的数据给函数

//用事件委托

$(‘ul’).on(‘click’, ‘li’, {name:‘ccy’}, function(e){

console.log( $(this).text());

console.log(e.data); //事件中的data对象存储着传递进去的数据

})

事件中的对象:

在这里插入图片描述

  1. off():解绑事件

2.1 off(事件)

//解除button上的click事件

$(‘button’).off(‘click’)

2.2 off(事件,处理函数名)

当同一个事件有多个处理函数,想要解绑其中一个时使用

注意写的时处理函数的名称,不是再写一次匿名函数

如:

在这里插入图片描述

这样是不能解绑的,第二个click事件的处理函数和解绑里写的函数是两个函数,不能起到解绑的作用

要像这样,才能解绑打印888的处理函数:

$(‘button’).on(‘click’, function(){

$(‘ul’).append(‘

  • ’ + $(‘li’).length + ‘
  • ’)

})

/* 第二个点击事件的处理函数 */

function test(){

console.log(888);

}

$(‘button’).on(‘click’, test)

$(‘button’).off(‘click’,test)

  1. one():只执行一次事件

绑定的事件只执行一次

当用户有需要某个功能时,才展示相应的html结构,不需要时不展示,可以设计成点击之后有一个弹窗的效果,节省性能并提高网页的加载速度;当展示之后,关闭这个小弹窗,用户可能又一次需要这个功能,又点击一次,所以展示之后,不把弹窗html结构删除,也节省了重复加载同一个资源的性能

读者福利

========

由于篇幅过长,就不展示所有面试题了,想要完整面试题目的朋友(另有小编自己整理的2024大厂高频面试题及答案附赠)

开源分享:docs.qq.com/doc/DSmRnRG…