js中事件绑定3种方法以及事件委托
###事件绑定
首先,我先来介绍我们平时绑定事件的三种方法。
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种方法以及事件委托相关推荐
- React事件绑定几种方法测试
前提 es6写法的类方法默认没有绑定this,不手动绑定this值为undefined. 因此讨论以下几种绑定方式. 一.构造函数constructor中用bind绑定 class App exten ...
- js中创建对象的5种方法
1.Object构造函数模式 所谓 Object 构造函数就是将 Object 作为构造函数,先创建一个空的 Object 对象,再动态添加属性或者方法. //创建 Object 对象 var p = ...
- js中去重的12种方法
1.将数组的每一个元素依次与其他元素做比较,发现重复元素,删除 function noRepeat1(arr) {for (var i = 0; i < arr.length - 1; i++) ...
- 浅析js中取绝对值的2种方法
1.abs() var aaa=-20; var bbb=Math.abs(aaa); 2.加减法 var aaa=-20; var bbb=-aaa 转载于:https://ww ...
- js中取绝对值的2种方法!
1.abs() var aaa=-20; var bbb=Math.abs(aaa); 2.加减法 var aaa=-20; var bbb=-aaa
- 在html中搜索按钮事件,html中button绑定点击事件的几种方法介绍
HTML中为button绑定事件的方式有三种. 例如以下标签: submit 一.使用jquery进行绑定$('#btn_submit').click(function(){ }); 二.使用原生js ...
- javascript中为某个对象(控件)绑定事件的几种方法
今天学习了javascirpt的一些基础知识,有关事件绑定的一些方法: 1.<input type="button" οnclick="clickHandler() ...
- js 绑定事件的几种方法 addEventListener()
看代码 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title> ...
- React绑定事件的四种方法
今天给大家分享一下react绑定事件的四种方法,也许会有不准确的地方,欢迎指点出来,大家一起进步~ 首先要先了解,在js中class的方法默认不会绑定this,默认情况下是undefined,所以就需 ...
最新文章
- MaxCompute 多行数据合并为一行数据
- B树、B+树、AVL树、红黑树
- Action中五个常量解释,(success,error,input,login,none)
- pythonnone用法_python中None返回值如何使用?
- magento左栏添加筛选Filtering options on Left-Navigation Menu in Products List Page
- 特斯拉Cybertruck与新款Model S同时在加州工厂曝光
- 关于python列表去重复后按照元列表序列输出
- X Lossless Decoder for mac(XLD音频无损解码器)
- config.o:文件无法辨识_HAZOP有哪些局限性,及系统生命周期不同阶段的危险辨识...
- 刀片存储助力发挥融合基础架构优势
- linux中vim怎么编辑文件内容,Linux 使用vim命令编辑文件内容
- 《深入理解计算机系统》勘误建议
- 算法笔记(个人用)(不定期更新)
- 国际化中的翻译工具poedit
- 卡塔编程_量子卡塔教您如何在Q#中进行量子编程
- phP imageMagic抠图,使用 Lua + ImageMagick 轻松批量抠图
- java发送邮件带图片和附件
- OC和Swift中循环引用的问题
- SVN怎么去掉版本控制,去除调svn绿色图标显示
- html5源码笔记(四)【爱创课堂专业前端培训】