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 相关文章推荐
javascript操作cookie_获取与修改代码
May 21 Javascript
Document.location.href和.replace的区别示例介绍
Mar 04 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
原生JS实现不断变化的标签
May 22 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 Javascript
如何用JavaScipt测网速
May 09 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中的加密功能
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
Python如何为图片添加水印
2016/11/25 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
关于python中的xpath解析定位
2020/03/06 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
岗位职责的含义
2013/11/17 职场文书
电气专业推荐信范文
2013/11/18 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
2014年妇女工作总结
2014/12/06 职场文书
旷课检讨书范文
2015/01/27 职场文书
幼师小班个人总结
2015/02/12 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python