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中的this指针
Mar 18 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
为开发者准备的10款最好的jQuery日历插件
Feb 04 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
javascript之IE版本检测超简单方法
Aug 20 Javascript
js定时器实例分享
Dec 20 Javascript
原生js实现获取form表单数据代码实例
Mar 27 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 Javascript
微信小程序自定义弹出层效果
May 26 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
77A一级收信机修理记
2021/03/02 无线电
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
Vue性能优化的方法
2020/07/30 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
Python实现模拟登录及表单提交的方法
2015/07/25 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python添加模块搜索路径方法
2017/09/11 Python
python绘制中国大陆人口热力图
2018/11/07 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
2014年大班元旦活动方案
2014/02/26 职场文书
培训班通知
2015/04/25 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书