如何使用jQuery为动态添加的元素添加点击事件?

4

在单击时,我可以删除box100和box200,但无法删除附加到列表中的box1-box5。 我该如何选择添加的元素?

https://jsfiddle.net/uhmgj8ky/4/

html
  <ul>
  <li class='list'>remove box100</li>
  <li class='list'>remove box200</li>
  </ul>
  <div class='box' box='box1'>add box1</div>
  <div class='box' box='box2'>add box2</div>
  <div class='box' box='box3'>add box3</div>
  <div class='box' box='box4'>add box4</div>
  <div class='box' box='box5'>add box5</div>

css
.box{
  height:50px;
  width:50px;
  border:2px solid blue;
  display: inline-block;
}
ul li{
    height:50px;
  width:50px;
  border:2px solid blue;
  display: inline-block;
  margin-right: 1px;
}

jquery
$('.box').on('click', function(){
    var txt = $(this).attr('box');
    $('ul').append("<li class='list'>remove "+txt+"</li>");
});

$('.list').on('click', function(){
    $(this).remove();
});

顺便提一下,box 不是一个有效的属性,你应该使用 data-box - adeneo
1个回答

10

你应该使用事件委托

事件委托允许我们将一个单一的事件监听器附加到父元素上,对于所有匹配选择器的后代元素触发,无论这些后代元素现在是否存在或是将来添加。两者都可以。

on()

delegate()

函数允许我们执行事件委托。

添加一个容器类。

 <ul>
  <li class='list'>remove box100</li>
  <li class='list'>remove box200</li>
  </ul>
<div class="box-container">
  <div class='box' box='box1'>add box1</div>
  <div class='box' box='box2'>add box2</div>
  <div class='box' box='box3'>add box3</div>
  <div class='box' box='box4'>add box4</div>
  <div class='box' box='box5'>add box5</div>
</div>

   $('.box-container').on('click',".box", function(){
     var txt = $(this).attr('box');
    $('ul').append("<li class='list'>remove "+txt+"</li>");
    });

     $('ul').on('click','.list', function(){
     $(this).remove();
     });

更新 https://jsfiddle.net/uhmgj8ky/6/

欲了解事件委托的更多信息,请观看视频


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接