首页 > 其他分享 >jQuery事件(事件委托/优化添加删除表格记录/事件委托delegate中的this对应关系)

jQuery事件(事件委托/优化添加删除表格记录/事件委托delegate中的this对应关系)

时间:2023-01-14 01:55:06浏览次数:63  
标签:jQuery function 委托 email 事件 var click

视频

为什么要用事件委托:新增的dom元素没有对应点击事件。子元素的事件交给父元素来代为处理。父元素要知道是哪个子元素发生的。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <title>20_事件委托2</title>
</head>

<body>
<ul>
  <li>1111</li>
  <li>2222</li>
  <li>3333</li>
  <li>4444</li>
</ul>

<li>22222</li>
<br>
<button id="btn1">添加新的li</button>
<button id="btn2">删除ul上的事件委托的监听器</button>

<!--
1. 事件委托:
  * 将多个子元素(li)的事件监听委托给父辈元素(ul)处理
  * 监听回调是加在了父辈元素上
  * 当操作任何一个子元素(li)时, 事件会冒泡到父辈元素(ul)
  * 父辈元素不会直接处理事件, 而是根据event.target得到发生事件的子元素(li), 通过这个子元素调用事件回调函数
2. 事件委托的2方:
  * 委托方: 业主  li
  * 被委托方: 中介  ul
3. 使用事件委托的好处
  * 添加新的子元素, 自动有事件响应处理
  * 减少事件监听的数量: n==>1
4. jQuery的事件委托API
  * 设置事件委托: $(parentSelector).delegate(childrenSelector, eventName, callback)
  * 移除事件委托: $(parentSelector).undelegate(eventName)
-->
<script src="js/jquery-1.10.1.js"></script>
<script>
  $(function () {
    //事件委托
    $('ul').delegate('li', 'click', function () {
      this.style.background = 'red'
    })

    $('#btn1').click(function () {
      $('ul').append('<li>xxxxxxxxx</li>')
    })

    $('#btn2').click(function () {
      // 移除事件委托
      $('ul').undelegate()
    })
  })
</script>
</body>
</html>

优化添加删除表格记录

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>添加删除记录练习</title>
  <link rel="stylesheet" type="text/css" href="css.css"/>
</head>
<body>

<table id="employeeTable">
  <tr>
    <th>Name</th>
    <th>Email</th>
    <th>Salary</th>
    <th>&nbsp;</th>
  </tr>
  <tr>
    <td>Tom</td>
    <td>[email protected]</td>
    <td>5000</td>
    <td><a href="deleteEmp?id=001">Delete</a></td>
  </tr>
  <tr>
    <td>Jerry</td>
    <td>[email protected]</td>
    <td>8000</td>
    <td><a href="deleteEmp?id=002">Delete</a></td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>[email protected]</td>
    <td>10000</td>
    <td><a href="deleteEmp?id=003">Delete</a></td>
  </tr>

</table>

<div id="formDiv">

  <h4>添加新员工</h4>

  <table>
    <tr>
      <td class="word">name:</td>
      <td class="inp">
        <input type="text" name="empName" id="empName"/>
      </td>
    </tr>
    <tr>
      <td class="word">email:</td>
      <td class="inp">
        <input type="text" name="email" id="email"/>
      </td>
    </tr>
    <tr>
      <td class="word">salary:</td>
      <td class="inp">
        <input type="text" name="salary" id="salary"/>
      </td>
    </tr>
    <tr>
      <td colspan="2" align="center">
        <button id="addEmpButton" value="abc">
          Submit
        </button>
      </td>
    </tr>
  </table>
</div>

<script src="jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
  /*
   功能说明:
   1. 点击'Submit', 根据输入的信息在表单中生成一行员工信息
   2. 点击Delete链接, 提示删除当前行信息, 点击确定后删除信息
   技术要点:
   1. DOM查询
   2. 绑定事件监听
   3. DOM增删改
   4. 取消事件的默认行为
   */
  $(function () {
    $('#addEmpButton').click(function () {
      //1.收集输入的数据
      var $empName = $('#empName')
      var $email = $('#email')
      var $salary = $('#salary')

      var empName = $empName.val()
      var email = $email.val()
      var salary = $salary.val()
      var id = Date.now()//随机数

      //2.生成对应的<tr>标签结构,并插入#employeeTable的tbody中
      /*
       <tr>
         <td>Bob</td>
         <td>[email protected]</td>
         <td>10000</td>
         <td><a href="deleteEmp?id=003">Delete</a></td>
       </tr>
       */
      $('<tr></tr>')
        .append('<td>'+empName+'</td>')//拼串
        .append('<td>'+email+'</td>')
        .append('<td>'+salary+'</td>')
        .append('<td><a href="deleteEmp?id='+id+'">Delete</a></td>')
        .appendTo('#employeeTable')
        // .find('a')
        // .click(clickA)//给a标签加点击监听,阻止自带的行为
      
      //3.清除
      $empName.val('')
      $email.val('')
      $salary.val('')

    })
    //给所有删除链接绑定点击监听
    // $('a').click(clickA)


    //通过table实现所有对a的click事件委托
    $('#employeeTable').delegate('a','click',clickA)//说明原来的function中的this对应的是a


    function clickA (event) {
      event.preventDefault()
      var $tr = $(this).parent().parent()
      var name = $tr.children('td:first').html()
      if(confirm('确定删除'+name+'吗?')) {
        $tr.remove()
      }
    }
  })


</script>
</body>
</html>

标签:jQuery,function,委托,email,事件,var,click
From: https://www.cnblogs.com/chuixulvcao/p/17051063.html

相关文章

  • jQuery事件(事件处理,事件绑定与解绑)
    视频<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>18_事件绑定与解绑</title></head><styletype="text/css">*{margin:0px;}.......
  • jQuery(练习2添加删除表格记录,含原生对照)
    视频原生<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html><head> <metahttp-equiv="Content-Type"content="te......
  • jQuery入门
    jQuery入门1、基础语法jQuery语法是通过选取HTML元素,并对选取的元素执行某些操作。基础语法:$(selector).action()美元符号定义jQuery选择符(selector)"查询"和"查......
  • jQuery基础
    一、jQuery的产生它的作者是JohnResig,于2006年创建的一个开源项目jQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一整套定义好的方法jQu......
  • jQuery进阶
    一、jQuery动画1.1jQuery的显示和隐藏jQuery中显示方法为.show(),隐藏方法为.hide()。在无参数的时候,只是硬性的显示内容和隐藏内容在.show()和.hide()......
  • Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解)
    播放器版本11.2以后支持右键菜单屏蔽及自定义菜单1.更新播放器,11.2以上版本​​http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_3.swc......
  • 安卓笔记 0 加载模板和设置事件的DEMO
    在onCreate的方法中加载模板2种主要方式:1:setContentView(R.layout.activity_main);2:LinearLayoutmainLinearLayout=(LinearLayout)getLayoutInflate......
  • JS-jQuery1
      初始jQueryjQuery是目前最流行的JavaScript插件库,是JavaScript的封装,升级产品。设计宗旨是“WriteLess,DoMore”,即写的少,做的多。提供一种简便的JavaScript设计......
  • JS-jQuery2
      jQuery的DOM操作在JavaScript的基础之上,使用jQuery对节点做的DOM操作 原生JS添加节点  jQuery添加节点.append()在标签内部的末尾添加节点  jQuery......
  • jquery.liMarquee.js-文字滚动效果
    jquery.liMarquee.js插件:jquery多风格多功能滚动特效代码插件说明:须引入3个文件jquery.js、liMarquee的js和css文件代码:<!DOCTYPEhtml><htmllang="en"><head>......