事件监听addEventListener()和removeEventListener() ---------1
一直想写一个原生事件监听的记录,方便以后看,不愿意写主要是事件监听的单词太长,记起来好难记每次都要查,这次把知道的写完了,来这里查好了,以后要是理解的更透彻了,就再补全好了
首先,DOM0级事件和DOM2级事件
给一个元素添加事件有三种方法
HTML
<input type="button" value='button1' id='btn1' />
<input type="button" value='button2' id='btn2' />
<input type="button" value='button3' id='btn3' onclick="alert('我是btn3')" />
对于btn3的按钮,事件是直接加到元素标签内的,好像叫html事件,缺点就是没有分离吧
DOM0级事件
//添加事件
var btn1=document.getElementById('btn1');
btn1.onclick=function(){
alert('我是btn1')
}
//解除事件
btn1.onclick=null;
直接取到btn1,给他添加conclick事件,缺点只能添加一个事件,如果再添加,会覆盖第一个事件
DOM2级事件
//添加事件
var btn2=document.getElementById('btn2');
function box(){alert('我是btn2');}
btn2.addEventListener('click',box,false);
//解除事件
btn2.removeEventListener('click',box,false);
添加事件用 addEventListener(什么事件、做什么事、false); false好像是事件冒泡阶段 对应的 true事件捕获阶段,一般我这种菜鸟用不到true,没试过,反正一律写false
删除事件用 removeEventListener(什么事件、做什么事、false);
ps:添加事件和删除事件,必须和添加的时候相同才能移除,不然清不掉。
好像挺简单,真的要是这样就好了,这个addEventListener和removeEventListener有兼容问题,好像是IE8以下不好使,所以还有另外的单词要记
attachEvent 和 detachEvent,这个好像是IE专属,
用法
//添加事件
var btn2=document.getElementById('btn2');
function box(){alert('我是btn2');}
btn2.attachEvent('onclick',box);
//解除事件
btn2.detachEvent('onclick',box);
没有第三个参数是因为IE8以前只支持事件冒泡,另外需要记住,这里是onclick,所有的事件都要加on,低级的浏览器事比较多
好了,要记住这四个单词
addEventListener、removeEventListener、attachEvent、detachEvent
------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------------
要兼容所有浏览器,就做判断,谁有能力,谁做事
var btn2=document.getElementById('btn2');
function box(){alert('我是btn2');}
var eventUtil={
// 添加事件
addHandler:function(element,type,handler){ ////三个参数分别为元素、事件、做什么事(方法)
if(element.addEventListener){ //如果支持element.addEventListener方法就用addEventListener
element.addEventListener(type,handler,false);
}else if(element.attachEvent){ //如果支持element.attachEvent方法就用attachEvent
element.attachEvent('on'+type,handler);
}else{
element['on'+type]=handler; //如果都不支持,那就用DOM0级的方法
}
},
// 删除事件 //同上
removeHandler:function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.detachEvent('on'+type,handler);
}else{
element['on'+type]=null;
}
}
}
eventUtil.addHandler(btn2,'click',box);
eventUtil.removeHandler(btn2,'click',box);
封装了一个方法,以后可以直接拿过来用
事件监听addEventListener()和removeEventListener() ---------1的更多相关文章
- js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)
研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...
- [转]addEventListener() 方法,事件监听
转载 白杨-M http://www.cnblogs.com/baiyangyuanzi/p/6627401.html addEventListener() 方法,事件监听 你可以使用 remov ...
- addEventListener() 方法,事件监听
知识点1:addEventListener() 方法,事件监听,可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(e ...
- addEventListener() 方法,事件监听(去哪儿网用到过)
addEventListener() 方法,事件监听 你可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(event ...
- JS常用方法(获取Class、获取元素样式、事件监听、cookie、ajax等)
var Util = {}; Util.byClass = function (oClass) {//全局获取 var tags = document.all ? document.all : doc ...
- html屏幕旋转事件监听
近期做微信服务号开发,在做图片展示的时候需要横竖屏的检测实现图片大小不同的展示. 添加屏幕旋转事件侦听,可随时发现屏幕旋转状态(左旋.右旋还是没旋). 摘自:http://bbs.phonegap10 ...
- [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...
- 记一次使用 removeEventListener 移除事件监听失败的经历
测试一 测试代码如下 var Test = function() { this.element = document.body; this.handler = function() { console ...
- JavaScript事件监听以及addEventListener参数分析
事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:ad ...
随机推荐
- w_all_checked - js -checkbox 多选、全选、submit、request
<!doctype html> <html> <head> <meta charset="UTF-8"> </head> ...
- Java中常用的内存区域
在Java中主要存在4块内存空间,这些内存空间的名称及作用如下. 1. 栈内存空间: 保存所有对象名称(更准确的说是保存了引用的堆内存空间的地址). 2. 堆内存空间: 保存每个对象的具体属性内容 ...
- Delphi中如何实现滚动文字
1.先添加一个Timer控件,其Interval属性设置为50. 2.再添加一个Label控件,Name为Label1. 3.然后在Timer的OnTimer事件添加如下代码: unit Unit13 ...
- linux命令篇
普通用户登陆,充值root密码: sudo passwd root
- Java 获取类名,函数名,行数
C++下用宏来实现.分别是__FILE__,__func__,__LINE__分别代表,C++编译自动在每个文件中设定__FILE__类型是字符串常量 ,将__LINE__替换为当前行数,类型是数字常 ...
- ASP.NET一些公共方法commTools
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- php内容
PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 PHP中关键字通常分为四种类型: 1. 用于数据类型定义的关键字,如:int,string,bool,classic,object和a ...
- FW docker使用问题总结,解决国内不能访问gcr.io的问题
docker使用问题总结 解决国内不能访问gcr.io的问题 国内可以通过https://dashboard.daocloud.io来下载. 比如?gcr.io/google_containers/p ...
- postgressql安装
参考文章 FreeBSD10.0下ports安装postgresql9.4-server: http://download.csdn.net/detail/machen_smiling/8425613 ...
- 《linux内核设计与实现》读书笔记第五章——系统调用
第5章 系统调用 操作系统提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层. 该层主要作用有三个: 为用户空间提供了 ...