事件委託主要是利用事件冒泡現象來實現的,對於事件委託的精準的掌握,可以有利於提高程式碼的執行效率。先看一段程式碼實例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>脚本之家</title> <style type="text/css"> table{ width:300px; height:60px; background-color:green; } table td{ background-color:white; } </style> <script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("td").bind("click",function(){ $(this).text("哈哈"); }) }) </script> </head> <body> <table cellspacing="1"> <tr> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> </tr> <tr> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> </tr> </table> </body> </html>
在上述程式碼中,使用bind()方法為每一個td綁定了一個click事件處理函數,這樣當點選儲存格的時候,就會重新設定儲存格中的文字。雖然此中方式實現了所需的效果,看起來非常的完美,其實並非這樣,如果當單元格非常多時候,遍歷單元格和為每個單元格綁定事件處理函數將會大大降低程式碼的效能,如果讓單元格的父元素監聽事件,只要判斷最初觸發事件的DOM元素是否為td即可。
程式碼修改如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>脚本之家</title> <style type="text/css"> table{ width:300px; height:60px; background-color:green; } table td{ background-color:white; } </style> <script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("table").bind("click",function(e){ var target = e.target; $target=$(target); if ($target.is("td")){ $target.text('哈哈'); } }) }) </script> </head> <body> <table cellspacing="1"> <tr> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> </tr> <tr> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> <td>单元格</td> </tr> </table> </body> </html>
以上程式碼實現了相同的功能,但是效率卻大大提高了。
總結:所謂的事件委託,就是事件目標本身不處理事件,而是把處理任務委託給其父元素或祖先元素,甚至根元素。
以上所述就是本文的全部內容了,希望大家能夠喜歡。