如何使用jQuery将click侦听器附加到动态创建的子元素?

时间:2018-06-06 06:12:52

标签: javascript jquery

我知道正在询问类似的问题(比如here)但是,作为一个jQuery noob,我仍然无法将点击监听器附加到a所在的li元素中整个ul.li.a像这样动态地附加到DOM。

<div id="users-col">
  <!-- dynamically appended --> 
  <ul id="users-list">
       <li>
          <a class="user" id="Alice">Alice</a>
       </li>
       <li>
          <a class="user" id="Bob">Bob</a>
       </li>
  </ul>
   <!-- END dynamically appended --> 
</div>

这是我尝试过的一个(众多)jQuery函数之一:

$('#users-col ul.li.a').on('click', '.user', (function () {
  console.log('user clicked:', this.id); 
});

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

您需要在可用的元素上绑定事件(不动态添加)

$('#users-col').on('click', 'a.user', (function () {
  console.log('user clicked:', this.id); 
});

供参考,jQuery.on

答案 1 :(得分:0)

在这种情况下,您必须将事件与动态创建的子项的父项挂钩:

$('#users-col').on('click', 'a.user',        (function () { 
console.log('click bound'); 
});

答案 2 :(得分:0)

为方便起见和重用,我将第一个字段直接绑定到文档:

$(document).on('click', '.user', (function () {
  console.log('user clicked:', this.id);
}));
<div id="users-col">
    <!-- dynamically appended -->
    <ul id="users-list">
        <li>
            <a class="user" id="Alice">Alice</a>
        </li>
        <li>
            <a class="user" id="Bob">Bob</a>
        </li>
    </ul>
    <!-- END dynamically appended -->
</div>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
    </script>

监听器直接绑定到类的文档,因此现在很容易在整个文档中动态地重用该类。