js进阶---12-12、jquery事件委托怎么使用

js进阶---12-12、jquery事件委托怎么使用

一、总结

一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果。

1、事件委托是什么?

通过事件冒泡,让子元素绑定的事件冒泡到父元素(或祖先元素)上,然后再进行处理。

 91       //使用事件委托,只在table上绑定一次事件
 92       //可以动态绑定事件
 93       $('table').on('click','td',function(){
 94             //$(this).css('background','orange')
 95             alert('click_td')
 96       })

2、事件委托的优势是什么?

给动态元素添加事件
事件只绑定一次,效率高(对于同类大量元素需要绑定,效率非常高,比如一个表格2500td,要给每个td绑定事件)

 91       //使用事件委托,只在table上绑定一次事件
 92       //可以动态绑定事件
 93       $('table').on('click','td',function(){
 94             //$(this).css('background','orange')
 95             alert('click_td')
 96       })

3、事件委托的监听对象是谁(事件委托的对象是谁)?

要执行事件他祖先,比如要给大量td绑定事件,事件委托的对象就是它爷爷,也就是table表

 91       //使用事件委托,只在table上绑定一次事件
 92       //可以动态绑定事件
 93       $('table').on('click','td',function(){
 94             //$(this).css('background','orange')
 95             alert('click_td')
 96       })

4、代码添加的元素和动态添加的元素的区别?

代码生成元素的添加事件的代码要在代码生成之后,这样他是可以绑定事件的

 73       //如果不是动态创建的,可以直接绑定事件
 74       $('<div></div>').appendTo($('body'))
 75       $('<div></div>').appendTo($('body'))
 76       $('<div></div>').appendTo($('body'))
 77       $('div').on('click',function(){
 78             $(this).css('background','orange')
 79        })

5、事件委托的使用场景是什么?

一个表格里面有很多td,要给td绑定事件,如果使用给每个td绑定事件的方法,效率非常低,并且容易出错,使用事件委托的话就特别方便了,一步到位。

 91       //使用事件委托,只在table上绑定一次事件
 92       //可以动态绑定事件
 93       $('table').on('click','td',function(){
 94             //$(this).css('background','orange')
 95             alert('click_td')
 96       })

6、如何动态给表格添加行列?

html代码+append方法

 87       $('#btn1').click(function(){
 88           $('<tr><td></td><td></td><td></td><td></td><td></td></tr>').appendTo('table')
 89       })

二、jquery事件委托怎么使用

1、相关知识

事件委托

通过事件冒泡,让子元素绑定的事件冒泡到父元素(或祖先元素)上,然后再进行处理。

 

2、代码

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <style>
  4 </style>
  5 <head>
  6     <meta charset="UTF-8">
  7     <title>演示文档</title>
  8     <script type="text/javascript" src="jquery-3.1.1.min.js"></script>
  9     <style type="text/css">
 10         input{width: 100px;height: 30px;}
 11         div{width: 50px;height: 50px;border:1px solid green;display: inline-block;margin-left: 15px}
 12         td{width: 50px;height: 20px;background: #ccc}
 13       </style>
 14 </style>
 15 </head>
 16 <body>
 17 <h3>jQuery事件对象</h3>
 18 <input id="btn1" type="button" value="事件绑定"><br>
 19 <div></div>
 20 <table>
 21     <tr>
 22         <td></td>
 23         <td></td>
 24         <td></td>
 25         <td></td>
 26         <td></td>
 27     </tr>
 28     <tr>
 29         <td></td>
 30         <td></td>
 31         <td></td>
 32         <td></td>
 33         <td></td>
 34     </tr>
 35     <tr>
 36         <td></td>
 37         <td></td>
 38         <td></td>
 39         <td></td>
 40         <td></td>
 41     </tr>
 42     <tr>
 43         <td></td>
 44         <td></td>
 45         <td></td>
 46         <td></td>
 47         <td></td>
 48     </tr>
 49     <tr>
 50         <td></td>
 51         <td></td>
 52         <td></td>
 53         <td></td>
 54         <td></td>
 55     </tr>
 56 </table>
 57 <script type="text/javascript">
 58     $(function(){
 59         /*
 60     //使用事件委托动态绑定事件
 61       $('#btn1').on('click',function(){
 62          $("<div></div>").appendTo($('body'))
 63       })
 64       // $('div').on('click',function(){
 65       //     $(this).css('background','orange')
 66       // })
 67       $(document).on('click','div',function(){
 68           $(this).css('background','orange')
 69       })
 70       //移出事件委托
 71       $(document).off('click','div')
 72       
 73       //如果不是动态创建的,可以直接绑定事件
 74       $('<div></div>').appendTo($('body'))
 75       $('<div></div>').appendTo($('body'))
 76       $('<div></div>').appendTo($('body'))
 77       $('div').on('click',function(){
 78             $(this).css('background','orange')
 79        })
 80       
 81       //每一个td绑定一个事件
 82       //不能动态的添加事件,效率低
 83       $('td').on('click',function(){
 84           alert('click_td')
 85       })
 86       */ 
 87       $('#btn1').click(function(){
 88           $('<tr><td></td><td></td><td></td><td></td><td></td></tr>').appendTo('table')
 89       })
 90 
 91       //使用事件委托,只在table上绑定一次事件
 92       //可以动态绑定事件
 93       $('table').on('click','td',function(){
 94             //$(this).css('background','orange')
 95             alert('click_td')
 96       })
 97 
 98     })
 99 </script>
100 </body>
101 </html>
 

给动态元素添加事件
事件只绑定一次,效率高

原文地址:https://www.cnblogs.com/Renyi-Fan/p/9282354.html