JavaScript中绑定事件的三种方式及去除绑定

 更新时间:2016年11月05日 11:47:31   投稿:daisy  
大家都知道要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称。下面这篇文章给大家详细介绍了JavaScript中绑定事件的三种方式以及去除绑定的方法,有需要来一起看看吧。

在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能有所帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • JS中自定义定时器让它在某一时刻执行

    JS中自定义定时器让它在某一时刻执行

    写一个方法,让它在某一时刻执行,即需要在JS中写一个定时器,当时间达到要求时间时,需要执行的方法自动执行,下面的示例大家可以参考下
    2014-09-09
  • JS判断当前是否平板安卓并是否支持cordova方法的示例代码

    JS判断当前是否平板安卓并是否支持cordova方法的示例代码

    这篇文章主要介绍了JS判断当前是否平板安卓并是否支持cordova方法,pc和安卓平板共用一套代码,平板的代码用了cordova做了一个壳子嵌套如果用了cordova就不支持elementUI中的上传功能,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • js实现从数组里随机获取元素

    js实现从数组里随机获取元素

    这篇文章主要介绍了js实现从数组里随机获取元素的方法,以及个人封装的js代码分享,十分的实用,这里推荐给小伙伴们
    2015-01-01
  • 微信小程序 flexbox layout快速实现基本布局的解决方案

    微信小程序 flexbox layout快速实现基本布局的解决方案

    flexbox layout 弹性盒子布局。弹性盒子可以快速的对小程序进行布局。这篇文章主要介绍了微信小程序 flexbox layout快速实现基本布局的方法,需要的朋友可以参考下
    2020-03-03
  • javascript感应鼠标图片透明度显示的方法

    javascript感应鼠标图片透明度显示的方法

    这篇文章主要介绍了javascript感应鼠标图片透明度显示的方法,涉及javascript针对鼠标事件及图片透明度操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 基于BootStrap实现简洁注册界面

    基于BootStrap实现简洁注册界面

    这篇文章主要介绍了基于BootStrap实现简洁注册界面,需要的朋友可以参考下
    2017-07-07
  • 浅谈JavaScript的几种继承实现方式

    浅谈JavaScript的几种继承实现方式

    本文主要介绍了浅谈JavaScript的几种继承实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 一个关于JS操作符in问题引发的探究

    一个关于JS操作符in问题引发的探究

    这篇文章主要给大家介绍了一个JS操作符in问题引发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • jquery将标签元素的高设为屏幕的百分比

    jquery将标签元素的高设为屏幕的百分比

    这篇文章主要介绍了js将标签元素的高设为屏幕的百分比,需要的朋友可以参考下
    2017-04-04
  • typeScript中数组类型定义及应用详解

    typeScript中数组类型定义及应用详解

    相信大家应该都知道ts只允许数组中包括一种数据类型的值,下面这篇文章主要给大家介绍了关于typeScript中数组类型定义及应用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05

最新评论