• 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');
  • })
  • 相关阅读:
    python中应对各种机制
    mybatisplus逻辑删除
    基于SSM的进存销管理系统
    git 相关命令
    windows无界鼠标,多机共享一套键鼠
    22-08-30 西安JUC(03) Callable接口、阻塞队列4套方法、ThreadPool线程池
    EO.Web浏览器 v2023.0.18.0 for .NET -- EO.WebBrowser
    Java“牵手”京东商品详情数据,京东商品详情接口,京东API接口申请指南
    node.js+uniapp(vue),阿里云短信验证码
    JDBC编程
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/127836222