当前位置: > > > jQuery - 给动态创建的元素添加事件绑定(给js新插入元素添加click事件)

jQuery - 给动态创建的元素添加事件绑定(给js新插入元素添加click事件)

1,问题描述

(1)这里以点击事件为例,通过 click() 方法给页面上所有的“删除”按钮添加个点击响应。要注意的是,“删除”按钮除了页面上原有的之外,还可以通过代码动态插入。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="js/jquery-3.1.1.js"></script>
  <script type="text/javascript">
     $(function() {
        //新增按钮点击响应
        $('#addBtn').click(function(){
            //添加一个新条目
            $('ul').append('<li>动态新增条目' +
            ' <button class="delBtn" type="button">删除</button></li>');
        });

        //删除按钮点击响应
        $('.delBtn').click(function(){
          $(this).parent().remove(); 
        });
     });
  </script>
</head>
<body>
  <button id="addBtn" type="button">新增</button>
  <ul>
    <li>原有的条目 <button class="delBtn" type="button">删除</button></li>
    <li>原有的条目 <button class="delBtn" type="button">删除</button></li>
  </ul>
</body>
</html>

(2)运行程序可以发现,对于原先就存在的 HTML 页面元素,点击其身后的“删除”按钮就会被删除。而动态添加的 HTML 元素,点击“删除”按钮无法删除。
         

2,解决办法

    使用 on() 方法代替 click() 方法来给“删除”按钮添加点击事件。因为使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。
on() 和 click() 的区别:
  • 二者在绑定静态控件时没有区别。
  • 但是如果面对动态产生的控件,只有 on() 能成功的绑定到动态控件中。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="js/jquery-3.1.1.js"></script>
  <script type="text/javascript">
     $(function() {
        //新增按钮点击响应
        $('#addBtn').click(function(){
            //添加一个新条目
            $('ul').append('<li>动态新增条目' +
            ' <button class="delBtn" type="button">删除</button></li>');
        });

        //删除按钮点击响应
        $('ul').on('click', '.delBtn', function(){ //只要改这一行就可以了
          $(this).parent().remove();
        });
     });
  </script>
</head>
<body>
  <button id="addBtn" type="button">新增</button>
  <ul>
    <li>原有的条目 <button class="delBtn" type="button">删除</button></li>
    <li>原有的条目 <button class="delBtn" type="button">删除</button></li>
  </ul>
</body>
</html>
评论0