• jQuery的事件委托实例分析


    事件委托主要是利用事件冒泡现象来实现的,对于事件委托的精准的掌握,可以有利于提高代码的执行效率。先看一段代码实例:

    <!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>

    以上代码实现了相同的功能,但是效率却大大提高了。

    总结:所谓的事件委托,就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素。

  • 相关阅读:
    ASE19 团队项目 模型组 scrum report集合
    ASE19团队项目alpha阶段model组 scrum2 记录
    ASE19团队项目alpha阶段model组 scrum1 记录
    ASE第二次结对编程——Code Search
    jdk中集成的jre和单独安装的jre有什么区别?
    window, linux, mac 比较文件和文件夹的区别
    Java 调用python、ruby 等脚本引擎
    微软软件工程 第一周博客作业
    绩效考核(2018.5.28~2018.6.3)
    数据库需求文档
  • 原文地址:https://www.cnblogs.com/mopagunda/p/4652788.html
Copyright © 2020-2023  润新知