代码之家  ›  专栏  ›  技术社区  ›  bhansa

对不工作的动态元素使用on()处理程序

  •  4
  • bhansa  · 技术社区  · 6 年前

    我遇到了这样一种情况:一个元素加载到页面上(由某个第三方动态添加),并为该元素定义了某个事件。

    .on() 不处理我正在动态添加的元素。

    这里有什么问题?

    // 1
    $('#bhansa').click(function(){
      console.log('first');
    })
    
    // 2
    $('.dom').on('click', '#bhansa', function(){
      console.log('second');
    })
    
    setTimeout(function(){
      $(".dom").html("<a href='#' id='bhansa'>Click me</a>");
    }, 4000);
    
    // 3
    $('#bhansa').on('click', function(){
      console.log('last');
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div class="dom"></div>
    3 回复  |  直到 6 年前
        1
  •  4
  •   Zakaria Acharki    6 年前

    在上使用事件委派 body remove/add DOM结构的组成部分:

    $('body').on('click', '#bhansa', function(){
         console.log('second');
    })
    

    作为 @塔普拉 comment表示,如果您委托绑定的元素是动态创建的,则说明绑定太低,应绑定到非动态的更高父级上 身体

        2
  •  2
  •   dorintufar    6 年前

    问题是,如果删除dom组件,所有侦听器也将被删除。
    尝试以这种方式添加侦听器:

    $("body").on("click", "#bhansa", () => {console.log(123)})
    
        3
  •  0
  •   Sanjeev Chauhan    6 年前

    你也可以这样写:-

    $(document).find().on('click', '#bhansa', function(){
        //code
    });