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 键盘事件的几个基本方法
Oct 30 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
jQuery事件 delegate()使用方法介绍
Oct 30 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
Nov 15 Javascript
Bootstrap 组件之按钮(二)
May 11 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
web打印小结
Jan 11 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
详解如何使用 vue-cli 开发多页应用
Dec 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
在Python中增加和插入元素的示例
2018/11/01 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python学生管理系统的实现
2020/04/05 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
英语专业推荐信
2013/11/16 职场文书
迎新晚会邀请函
2014/02/01 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
英文自荐信范文
2015/03/25 职场文书
酒店宣传语大全
2015/07/13 职场文书
2016年教代会开幕词
2016/03/04 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS