###事件绑定
首先,我先来介绍我们平时绑定事件的三种方法。
1.嵌入dom

<button onclick="open()">按钮</button><script>
function open(){alert(1)
}
</script>

2.直接绑定

<button id="btn">按钮</button>
<script>
document.getElementById('btn').onclick = function(){alert(1)
}
</script>

3.事件监听

<button id="btn">按钮</button>
<script>
document.getElementById('btn').addEventListener('click',function(){alert(1)
})
//兼容IE
document.getElementById('btn').attachEvent('click',function(){alert(1)
})
</script>

###事件委托
对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只制定一个事件处理程序,就可以管理某一类型的所有事件。例如click事件一直会冒泡到document层。也就是我们可以只指定onclick事件处理程序,而不必给每个事件分别添加处理程序。
下面我们来看一个阿里巴巴笔试题的例子。

样式以及DOM结构

 <style>* {padding: 0;margin: 0;}.head, li div {display: inline-block;width: 70px;text-align: center;}li .id, li .sex, .id, .sex {width: 15px;}li .name, .name {width: 40px;}li .tel, .tel {width: 90px;}li .del, .del {width: 15px;}ul {list-style: none;}.user-delete {cursor: pointer;}</style>
</head><body>
<div id="J_container"><div class="record-head"><div class="head id">序号</div><div class="head name">姓名</div><div class="head sex">性别</div><div class="head tel">电话号码</div><div class="head province">省份</div><div class="head">操作</div></div><ul id="J_List"><li><div class="id">1</div><div class="name">张三</div><div class="sex">男</div><div class="tel">13788888888</div><div class="province">浙江</div><div class="user-delete">删除</div></li><li><div class="id">2</div><div class="name">李四</div><div class="sex">女</div><div class="tel">13788887777</div><div class="province">四川</div><div class="user-delete">删除</div></li><li><div class="id">3</div><div class="name">王二</div><div class="sex">男</div><div class="tel">13788889999</div><div class="province">广东</div><div class="user-delete">删除</div></li></ul></div></body>

**不用事件委托。**而这种方法造成的代价是,性能的大量浪费。如果是成千上万条数据,页面将会严重卡顿,甚至崩溃。

function Contact(){this.init();
}Contact.prototype.init = function(){var userdel = document.querySelectorAll('.user-delete');for(var i=0;i<lis.length;i++){(function(j){userdel[j].onclick = function(){userdel[j].parentNode.parentNode.removeChild(userdel[j].parentNode);}})(i);}
}new Contact();

使用事件委托,只绑定一次事件,大大减少了性能的损耗。也是在需要大量事件处理程序中一种非常好的解决方式。

function Contact(){this.init();
}Contact.prototype.init = function(){var lis = document.querySelector('#J_List');lis.addEventListener('click', function(e){var target = e.target || e.srcElement;if (!!target && target.className.toLowerCase()==='user-delete') {              target.parentNode.parentNode.removeChild(target.parentNode);}})
}new Contact();

更多请关注

js中事件绑定3种方法以及事件委托相关推荐

  1. React事件绑定几种方法测试

    前提 es6写法的类方法默认没有绑定this,不手动绑定this值为undefined. 因此讨论以下几种绑定方式. 一.构造函数constructor中用bind绑定 class App exten ...

  2. js中创建对象的5种方法

    1.Object构造函数模式 所谓 Object 构造函数就是将 Object 作为构造函数,先创建一个空的 Object 对象,再动态添加属性或者方法. //创建 Object 对象 var p = ...

  3. js中去重的12种方法

    1.将数组的每一个元素依次与其他元素做比较,发现重复元素,删除 function noRepeat1(arr) {for (var i = 0; i < arr.length - 1; i++) ...

  4. 浅析js中取绝对值的2种方法

    1.abs()   var aaa=-20;    var bbb=Math.abs(aaa); 2.加减法   var aaa=-20;    var bbb=-aaa 转载于:https://ww ...

  5. js中取绝对值的2种方法!

    1.abs() var aaa=-20; var bbb=Math.abs(aaa); 2.加减法 var aaa=-20; var bbb=-aaa

  6. 在html中搜索按钮事件,html中button绑定点击事件的几种方法介绍

    HTML中为button绑定事件的方式有三种. 例如以下标签: submit 一.使用jquery进行绑定$('#btn_submit').click(function(){ }); 二.使用原生js ...

  7. javascript中为某个对象(控件)绑定事件的几种方法

    今天学习了javascirpt的一些基础知识,有关事件绑定的一些方法: 1.<input type="button" οnclick="clickHandler() ...

  8. js 绑定事件的几种方法 addEventListener()

    看代码 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title> ...

  9. React绑定事件的四种方法

    今天给大家分享一下react绑定事件的四种方法,也许会有不准确的地方,欢迎指点出来,大家一起进步~ 首先要先了解,在js中class的方法默认不会绑定this,默认情况下是undefined,所以就需 ...

最新文章

  1. MaxCompute 多行数据合并为一行数据
  2. B树、B+树、AVL树、红黑树
  3. Action中五个常量解释,(success,error,input,login,none)
  4. pythonnone用法_python中None返回值如何使用?
  5. magento左栏添加筛选Filtering options on Left-Navigation Menu in Products List Page
  6. 特斯拉Cybertruck与新款Model S同时在加州工厂曝光
  7. 关于python列表去重复后按照元列表序列输出
  8. X Lossless Decoder for mac(XLD音频无损解码器)
  9. config.o:文件无法辨识_HAZOP有哪些局限性,及系统生命周期不同阶段的危险辨识...
  10. 刀片存储助力发挥融合基础架构优势
  11. linux中vim怎么编辑文件内容,Linux 使用vim命令编辑文件内容
  12. 《深入理解计算机系统》勘误建议
  13. 算法笔记(个人用)(不定期更新)
  14. 国际化中的翻译工具poedit
  15. 卡塔编程_量子卡塔教您如何在Q#中进行量子编程
  16. phP imageMagic抠图,使用 Lua + ImageMagick 轻松批量抠图
  17. java发送邮件带图片和附件
  18. OC和Swift中循环引用的问题
  19. SVN怎么去掉版本控制,去除调svn绿色图标显示
  20. html5源码笔记(四)【爱创课堂专业前端培训】

热门文章

  1. python输出语句print格式_print输出语句的格式是什么?
  2. 2023年全国最新交安安全员精选真题及答案1
  3. 地下管孔资源紧张,气吹微缆不香吗?
  4. 素材要VIP咋整?看python大展神通
  5. 邮票的制作(1.主要画笔工具2.钢笔工具)
  6. 凡事当立则行,虽令不行
  7. 隧道人员定位解决方案
  8. 【NOIP冲刺题库题解】1973:【16NOIP普及组】买铅笔
  9. 【Altium designer】常用的线宽和过孔尺寸
  10. html多行注释如何实现,javascript多行注释如何实现