JavaScript 事件处理详解
事件绑定与解绑:
el.onEventName = function (){}
document.getElementById("dom").onclick = function(){ } //绑定事件
document.getElementById("dom").onclick = null; //移除绑定
dom0级事件,也就是最早期js处理事件的方式。事件绑定写法比较简单,但是有个致命的缺点,只能给一个元素的某一个行为绑定一次方法,第二次绑定的会把前面的覆盖掉。
document.getElementById("dom").onclick = function(){
console.log("click"); //无法输出
}
document.getElementById("dom").onmouseover = function(){
console.log("mouseover"); //可以输出
}
如上,触发 onclick 这个事件将不会任何反馈;
事件监听与移除监听:
el.addEventListener("EventName",function(){},false); 注:第一个参数:事件名;第二个参数:事件回调,第三个参数:表示是在事件捕获(true)或事件冒泡阶段(false) 触发,默认false
dom2级事件,js规范更新后,提出的另一种事件处理方案,通过addEventListener方法去监听某个元素上的事件是否被触发,解决了多次绑定被覆盖的问题
document.getElementById("dom").addEventListener("click",function(){
console.log("click1"); //输出
});
document.getElementById("dom").addEventListener("click",function(){
console.log("click2"); //输出
});
removeEventListener 移除监听 ,注意,如果addEventListener 第二个参数是匿名函数, removeEventListener无法移除,如下
错误示范:
document.getElementById("dom").addEventListener("click",function(){});
document.getElementById("dom").removeEventListener("click",function(){})
正确示范:
function eventcallback(){
}
document.getElementById("dom").addEventListener("click",eventcallback);
document.getElementById("dom").removeEventListener("click",eventcallback);
缺点:IE9以下addEventListener /removeEventListener不兼容
既来之,则安之!
IE6~8 用 attachEvent/detachEvent
el.attrachEvent("onEventName",function(){ }); 如:
el.attachEvent('onclick',function(){{});
detachEvent 移除事件 同removeEventListener 一样,无法移除 带匿名函数的事件
正确示范:
function eventcallback(){
}
document.getElementById("dom").attachEvent("onclick",eventcallback);
document.getElementById("dom").detachEvent("onclick",eventcallback);
如何去兼容所有浏览器:
function addEvent(el, eventName, fn, useCapture)
{
if (el.addEventListener)
{
// Dom2
el.addEventListener(eventName, fn, useCapture);
return true;
}
else if (el.attachEvent)
{
// IE6~8
var r = el.attachEvent('on' + eventName, fn);
return r;
}
else
{
// Dom0
el['on' + eventName] = fn;
}
}
(php开发,web前端,ui设计,vr开发专业培训机构,v客学院版权所有,转载请注明出路,谢谢!!!)
JavaScript 事件处理详解的更多相关文章
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】
正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- JavaScript事件详解-zepto的事件实现
zepto的event 可以结合上一篇JavaScript事件详解-原生事件基础(一)综合考虑源码暂且不表,github里还有中文网站都能下到最新版的zepto.整个event模块不长,274行,我们 ...
- javascript 函数详解2 -- arguments
今天我们接着上篇文章来继续javascript函数这个主题.今天要讲的是函数对像中一个很重要的属性--arguments. 相关阅读: javascript 函数详解1 -- 概述 javascrip ...
- [原创]JavaScript继承详解
原文链接:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...
- iOS开发——实用技术OC篇&事件处理详解
事件处理详解 一:事件处理 事件处理常见属性: 事件类型 @property(nonatomic,readonly) UIEventType type; @property(nonatomic ...
- javaScript基础详解(1)
javaScript基础详解 首先讲javaScript的摆放位置:<script> 与 </script> 可以放在head和body之间,也可以body中或者head中 J ...
随机推荐
- fopen与读写的标识r,r+,rb+,rt+,w+.....
FILE * fopen(const char * path,const char * mode); 参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存 ...
- LAMP集群项目四 安装apache、php及其插件
rpm -qa httpd* 查看是否有apache rpm -e httpd-2.2.22.2 卸载该文件,如果不让卸载,则加参数:--nodeps 不做软件中的依赖检查 ./configure ...
- Maven聚合、Maven仓库jar包以及Spring+MyBatis+JUnit+Maven整合测试的搭建过程
一.Maven将父项目创建到父项目的内部 在父项目的pom.xml上 点右键,选择maven-->new-->maven module project 二.Maven聚合 在某个项目的p ...
- kubernetes使用中遇到的坑
随着kubernetes的发展现在使用的范围越来越广,在使用过程中碰到问题是避免不了的,有些时候一些坑能提前避免是最好的,下面我做一个小记录,把我们生产环境中遇到的坑总结下,方便后面查询同时也方便各位 ...
- android系统权限SET_PREFERRED_APPLICATIONS怎么获取
最近自己写个demo,需要用到SET_PREFERRED_APPLICATIONS权限 在网上找了半天,大概有两种方式: 1. 将手机root后,把apk强行push到system/app目录下,重启 ...
- Netty 粘包/半包原理与拆包实战
Java NIO 粘包 拆包 (实战) - 史上最全解读 - 疯狂创客圈 - 博客园 https://www.cnblogs.com/crazymakercircle/p/9941658.html 本 ...
- 利用AES算法加密数据
准备工作: 模块安装问题: 首先在python中安装Crypto这个包 但是在安装模块后在使用过程中他会报错 下面是解决方法: pip3 install pycrypto 安装会报错 https:// ...
- Django在生产环境中的部署
基本思路 1.方案:Nginx+uwsgi 这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理.静态请求由Nginx自己处理.非静态请求通过uwsgi传递给Djan ...
- 浅析Android View(二)
深入理解Android View(一) View的位置參数信息 二.View的绘制过程 View的绘制过程一共分为三个部分: - measure(測量View的大小) - layout(确定View的 ...
- oracle查看被锁的表和被锁的进程,杀掉进程
-- 1. 查看被锁的表 SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name ...