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 $.ajax入门应用一
Nov 19 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
JavaScript闭包原理与用法实例分析
Aug 10 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
May 29 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
JS自定义右键菜单实现代码解析
Jul 16 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
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
laravel学习教程之存取器
2016/07/30 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Django日志模块logging的配置详解
2017/02/14 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python实现梯度法 python最速下降法
2020/03/24 Python
python自动下载图片的方法示例
2020/03/25 Python
Django ORM filter() 的运用详解
2020/05/14 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
优秀的教师个人的中文求职信
2013/09/21 职场文书
通信工程毕业生自荐信
2013/11/01 职场文书
成人继续教育实施方案
2014/03/01 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
房屋出售授权委托书
2014/10/12 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js