JavaScript中绑定事件的三种方式及去除绑定


Posted in Javascript onNovember 05, 2016

在JavaScript中,有三种常用的绑定事件的方法

第一种办法

函数写在结构层里面

非常不好,使页面很混乱,行为与结构得不到分离

<input type="button" onclick="func();">

绑定事件的第二种办法

好处:行为与结构开始分离

缺点:

第二种绑定方式中只能给一个时间绑定一个处理函数

即.onclick = fn1;  .  onclick = fn2 最终的效果是onclick = fn2

<select name="xueli" >
 <option value="">请选择学历</option>
 <option value="大学" >大学</option>
 <option value="中学">中学</option>
 <option value="初中">初中</option> 
 <option value="小学">小学</option> 
</select>
<form action="">
 <p>Email:<input type="text" name="email">
  姓名:<input type="text" name="ming" >
 </p>
</form>
document.getElementsByTagName('select')[0].onclick= function (){
  alert('嘻嘻');
 }
document.getElementsByName('email')[0].onblur=function (){
 alert('哈哈哈');
}
window.onload = function(){
 var d = document.getElementById('school');
 function fn1(){
  alert('hello');
 }
 function fn2(){
  alert('world');
 }
 d.onclick = fn1;//赋值操作 最终显示fn2
 d.onclick = fn2;
}

绑定事件的第三种办法

//错误写法1
window.onload = function(){
 var d = document.getElementById('school');
 function fn1(){//this此时指向window
  this.style.background = 'blue';
 }
 function fn2(){//this此时指向window
  this.style.background = 'red';
 }
 //写一个匿名函数
 //最终的出现错误
 d.onclick = function (){
  fn1();
  fn2();
  //fn1 fn2是属性window的 实际上是这样 window.fn1() window.fn2()
  
  
 }
}

下面这种写法没有问题 但是给DOM树额外增加了两个变量

window.onload = function(){
 var d = document.getElementById('school');
 d.fn1 = function (){//fn1是d的属性 最终this此时指向DOM对象
  this.style.background = 'blue';
 }
 d.fn2 = function (){//this此时指向DOM对象
  this.style.background = 'red';
 }
 
 //匿名函数 调用上面两个函数
 d.onclick = function (){
  this.fn1();
  this.fn2();
 }
}

不在使用onclick

window.onload = function(){
 var d = document.getElementById('school');
 //达到了一次绑定两个函数
 d.addEventListener('click',function () {alert('blue');this.style.background ='blue'});
 d.addEventListener('click',function () {alert('red');this.style.background ='red'});
 
}

去除绑定 不能用匿名函数 匿名函数 当时产生 当时消失

var fn1 = function () {alert('blue');this.style.background ='blue'};
var fn2 = function () {alert('red');this.style.background ='red'};
 
function adde(){
  var d = document.getElementById('school');
  d.addEventListener('click',fn1);
  d.addEventListener('click',fn2);
 }
function reme(){
 var d = document.getElementById('school');
 //d.removeEventListener('click',fn1);//只剩fn1
 d.removeEventListener('click',fn2);
}

在IE下第三种绑定事件的方法

<div id="school">
 
 </div>
 <input type="button" value="加事件" onclick="adde();">
 <input type="button" value="减事件" onclick="reme();">
var fn1 = function () {alert('blue');this.style.background ='blue'};
var fn2 = function () {alert('red');this.style.background ='red'};
 
function adde(){
  var d = document.getElementById('school');
  // IE6,7是后绑定的事件先发生
  d.attachEvent('onclick',fn1);
  d.attachEvent('onclick',fn2); //fn2先发生
 }
function reme(){
 var d = document.getElementById('school');
 //d.deltachEvent('click',fn1);//只剩fn1
 d.deltachEvent('click',fn2);
}

总结

以上就是JavaScript中绑定事件与去除绑定的三种方式,希望本文的内容对大家学习或者使用Javascript能有所帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
JavaScript中匿名函数的用法及优缺点详解
Jun 01 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
May 22 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
js实现上下左右键盘控制div移动
Jan 16 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
Vue跨域请求问题解决方案过程解析
Aug 07 Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 #Javascript
Javascript 普通函数和构造函数的区别
Nov 05 #Javascript
Javascript 函数的四种调用模式
Nov 05 #Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 #Javascript
jQuery中 $ 符号的冲突问题及解决方案
Nov 04 #Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 #Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 #Javascript
You might like
中国第一家无线电行
2021/03/01 无线电
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
php比较相似字符串的方法
2015/06/05 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
集团薪酬管理制度
2014/01/13 职场文书
《太阳》教学反思
2014/02/21 职场文书
法制宣传月活动方案
2014/05/11 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS