[JS学习笔记]浅谈Javascript事件模型
DOM0级事件模型
element.on[type] = function(){}
- e.target:直接触发事件的元素[IE8及以下不支持taget属性,使用e.srcElement代替]
- e.srcElement:直接触发事件的元素[FF不支持srcElement属性,使用e.target代替]
- e.currentTarget:绑定事件的元素[IE8及以下不支持currentTarget属性,使用this代替]
- this:同e.currentTarget[所有浏览器通用]
DOM2级事件模型
attachEvent
- 对于支持的浏览器
- e.target:不支持该属性
- e.srcElement:直接触发事件的元素
- e.currentTarget:不支持该属性
- this:始终指向window,可以使用call/apply改变this指向
element.attachEvent("on"+type,function(){ handler.apply(element,arguments); })
DOM2级事件模型
addEventListener
- 对于支持的浏览器
- e.target:直接触发事件的元素
- e.srcElement:不支持该属性
- e.currentTarget:绑定事件的元素
- this:同e.currentTarget
$(function(){ //dom0级事件绑定
var eleArr_d1 = $.makeArray($(".demo1").find(".layer1,.layer2,.layer3"));
$.each(eleArr_d1, function (i, o) {
o.onclick = fn0;
});
function fn0(e) {
e = e || window.event;
console.log("e.target=", getName(e.target));
console.log("e.srcElement=", getName(e.srcElement));
console.log("e.currentTarget=", getName(e.currentTarget));
console.log("this=", getName(this));
console.log("========================================================");
}
//dom2级事件绑定[IE]
var eleArr_d2 = $.makeArray($(".demo2").find(".layer1,.layer2,.layer3"));
if (document.attachEvent) {
$.each(eleArr_d2, function(i, o) {
o.attachEvent("onclick", function() { fn2_ie.apply(o,arguments); });//改变this指向
});
} else {
$(".demo2").find(".error").text("当前浏览器不支持attachEvent").show().css({ display: "inline-block" });
}
function fn2_ie(e) {
e = e || window.event;
console.log("e.target=", getName(e.target));
console.log("e.srcElement=", getName(e.srcElement));
console.log("e.currentTarget=", getName(e.currentTarget));
console.log("this=", getName(this));
console.log("========================================================");
}
//dom2级事件绑定[FF]
var eleArr_d3 = $.makeArray($(".demo3").find(".layer1,.layer2,.layer3"));
if (document.addEventListener) {
$.each(eleArr_d3, function(i, o) {
if (o.addEventListener) o.addEventListener("click", fn3_ff, false);
});
} else {
$(".demo3").find(".error").text("当前浏览器不支持addEventListener").css({display:"inline-block"});
}
function fn3_ff(e) {
e = e || window.event;
console.log("e.target=", getName(e.target));
console.log("e.srcElement=", getName(e.srcElement));
console.log("e.currentTarget=", getName(e.currentTarget));
console.log("this=", getName(this));
console.log("========================================================");
}
function getName(ele) {
if (ele==null) {
return ele;
}else if (ele.className) {
return ele.className;
} else if (ele.tagName) {
return ele.tagName;
}else if (ele.nodeName) {
return ele.nodeName;
} else {
return ele;
}
}
})
[JS学习笔记]浅谈Javascript事件模型的更多相关文章
- 浅谈Javascript事件模拟
事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的.这就意 ...
- Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)
横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...
- java设计模式学习笔记--浅谈设计模式
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...
- node.js学习笔记(三)——事件循环
要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...
- 【JS学习笔记】提取行间事件
行间提取事件第一种方法: function 名字() { ... } oBtn.onclick=名字: 第二种方法: oBtn.onclick=function () { ... } 其实在JS当中, ...
- Node.js学习笔记(三): 事件机制
大部分的nodejs核心api都建立在异步的事件驱动架构之上,所以events是Node.js 最重要的模块,它提供了唯一的接口.events 模块不仅用于用户代码与 Node.js 下层事件循环的交 ...
- JS学习笔记9之event事件及其他事件
-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...
- struts 2学习笔记—浅谈struts的线程安全
Sruts 2工作流程: Struts 1中所有的Action都只有一个实例,该Action实例会被反复使用.通过上面Struts 2 的工作流程的红色字体部分我们可以清楚看到Struts 2中每个A ...
- Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)
江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...
随机推荐
- Hurst指数以及MF-DFA
转:https://uqer.io/home/ https://uqer.io/community/share/564c3bc2f9f06c4446b48393 写在前面 9月的时候说想把arch包加 ...
- 【算法题12 解码方法decode way】
1.来源LeetCode91 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请 ...
- numpy.linspace介绍
numpy.linspace:在指定范围内返回均匀间隔的数组 In [12]: import numpy as np In [13]: result = np.linspace(1,10) #默认生成 ...
- VSCode代码格式化自动换行问题
打开VS设置,添加如下代码 "vetur.format.defaultFormatter.html": "js-beautify-html", "ve ...
- Winform ObservableCollection 添加删除修改无效
WPF中ObservableCollection 可以很好的使用. 在Winform中,之前使用ObservableCollection 做了几个功能,貌似增删改都可以. 今天写个Demo的时候发现不 ...
- ASP.NET WebAPI2 发布之后404 Not Found
方法一:首先确保服务器安装.Net FrameWork 4.0 并且注册IIS 方法二:对应应用程序池版本为v4.0,模式为集成 方法三:在web.config中加入 <system.webSe ...
- 利用ST MCU内部的基准参考电压监测电源电压及其它
源: 利用ST MCU内部的基准参考电压监测电源电压及其它
- 【Flask】Flask Cookie操作
### 什么是cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第 ...
- FIFO设计验证经验谈
概述: FIFO是电路设计中非常重要的一个基本电路.一般的超大规模集成电路中,都会用到FIFO.所以,FIFO是每个SOC设计和验证工程师必须掌握的一种核心电路. FIFO电路又分为异步FIFO和同步 ...
- 20145219 《Java程序设计》第09周学习总结
20145219 <Java程序设计>第09周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与接口,应用程序需要联机 ...