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 相关文章推荐
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
Oct 05 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
vue 中filter的多种用法
Apr 26 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
前后端常见的几种鉴权方式(小结)
Aug 04 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 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/05 新手入门
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
PHP四大安全策略
2014/03/12 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
Javascript继承机制详解
2017/05/30 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
python实现自动发送报警监控邮件
2018/06/21 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
Python threading的使用方法解析
2019/08/28 Python
python中class的定义及使用教程
2019/09/18 Python
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
Java语言的优势
2015/01/10 面试题
理工科学生的自我评价
2013/12/15 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
机关单位动员会主持词
2014/03/20 职场文书
工程质量承诺书范文
2014/03/27 职场文书
2014年消防工作总结
2014/11/21 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
python中的random模块和相关函数详解
2022/04/22 Python