• jQuery学习:事件委托--新添加的元素没有监听


    1. <ul>
    2. <li>111111111li>
    3. <li>222222222li>
    4. <li>33333333333li>
    5. <li>444444444444444li>
    6. ul>
    7. <li>55555555555li>
    8. <br>
    9. <button id="btn">添加新的libutton>
    10. <br>

    新增加的元素没有监听 

    1. $('ul>li').click(function(){
    2. this.style.background='red'
    3. })
    4. $('#btn').click(function(){
    5. $('
    6. vvv
    7. ').appendTo('ul')
  • })
  •  解决办法:事件委托

    将多个子元素li的事件监听委托给父辈元素ul处理

    监听回调函数是加在父辈元素上

    当操作任何一个子元素li时,事件会冒泡到父辈元素ul

    父辈元素不会直接处理事件,而是根据event.target得到发生事件的子元素li(知道事件发生的对象)。通过这个子元素调用事件回调函数


    委托方:业主li 被委托方:中介ul


    使用事件委托的好处:添加新的子元素,自动事件响应处理

                                        减少事件监听的数量:n===》1


    使用的函数有:父元素.delegate(子元素 事件名 回调函数) this是发生事件的子元素

    console.log(event.target===this);//ture

    1. $('#btn').click(function(){
    2. $('
    3. vvv
    4. ').appendTo('ul')
  • })
  • $('ul').delegate('li','click',function(event){
  • //this是点击的dom元素
  • this.style.background='red'
  • })
  •         移除事件的委托:父元素.undelegate(事件)

    不传递 是所有事件

     

    1. $('#btn').click(function() {
    2. $('
    3. vvv
    4. ').appendTo('ul')
  • })
  • $('ul').delegate('li', 'click', function(event) {
  • //this是点击的dom元素
  • console.log(event.target === this); //ture
  • this.style.background = 'red'
  • })
  • $('#btn2').click(function() {
  • $('ul').undelegate('click');
  • })
  • 相关阅读:
    单元测试 CI/CD
    针对从 Apple 购买的 App 或内容申请退款
    关于proTable的一些配置
    电商API接口的定义|接口的几个应用场景
    java毕业设计iMeli在线彩妆店铺mybatis+源码+调试部署+系统+数据库+lw
    技术分享 | 使用 SQL 语句来简化 show engine innodb status 的结果解读
    OpenCV之cv::createTrackbar
    Redis实现消息队列
    美团二面:为什么 Redis 会有哨兵?
    React之组件通信
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/127836222