博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript Event
阅读量:4501 次
发布时间:2019-06-08

本文共 1695 字,大约阅读时间需要 5 分钟。

事件原理

JS的事件原理,先看一段HTML。

Example
Click Me

 点击Click Me,会发生什么事呢?

DOM支持事件捕获(event capturing)及事件冒泡(event bubbling),前者是netscape浏览器的事件处理机制,后者是ie的处理机制。

netscape的事件捕获模型也叫top-down model,从上往下,直到target(div)。 而IE是从target(div)一直往上传递事件,就像一个气泡从水底往上冒。

例子

这是一个事件冒泡的例子,

alert input

修改这一句

// oEvent.cancelBubble = true;

则alert结果为 input body html

Stopping Event Propagation Example

 

事件处理

为事件添加处理函数

HTML

JS

var oDiv = document.getElementById(“div1”);oDiv.onclick = function () {alert(“I was clicked”);};

IE,每个元素及WINDOW对象都有2个函数: attachEvent, detachEvent.

[Object].attachEvent(“name_of_event_handler”, fnHandler);[Object].detachEvent(“name_of_event_handler”, fnHandler);

 上面的例子可以写成如下形式

var fnClick = function () {alert(“Clicked!”);};var oDiv = document.getElementById(“div”);oDiv.attachEvent(“onclick”, fnClick); //add the event handler//do some other stuff hereoDiv.detachEvent(“onclick”, fnClick); //remove the event handler

也同时可以为一个事件指派多个Handler。

 

Netscape Dom method

[Object].addEventListener(“name_of_event”, fnHandler, bCapture);[Object].removeEventListener(“name_of_event”, fnHandler, bCapture);

添加事件处理函数

var fnClick1 = function () {alert(“Clicked!”);};var fnClick2 = function () {alert(“Also clicked!”);};var oDiv = document.getElementById(“div1”);oDiv.addEventListener(“onclick”, fnClick1);oDiv.addEventListener(“onclick”, fnClick2);

 

事件对象

当一个事件发生时,我们需要知道这个事件的一些细节,如

1,那个对象引起的事件

2,事件发生时,鼠标的相关信息

3,事件发生时,键盘的相关信息

 

这些细节在IE及其他浏览器的获取方式是不同的,

IE

oDiv.onclick = function () {var oEvent = window.event;}

Netscape

oDiv.onclick = function () {var oEvent = arguments[0];}oDiv.onclick = function (oEvent) {}

 

事件的类型有很多,不同事件类型的属性在不同浏览器也有差异,这些都需要不断的练习,才能熟练掌握,未完待续。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/arist/p/3340470.html

你可能感兴趣的文章
Java函数的联级调用
查看>>
安装Asp.Net MVC3.0 失败
查看>>
linux挂载新磁盘、分区和开机自动挂载
查看>>
敏捷的生产--丰田模式之减少浪费
查看>>
面向对象---继承
查看>>
Python笔记(五):函数进阶
查看>>
pycharm中添加PATH变量
查看>>
pytorch中,不同的kernel对不同的feature map进行卷积之后输出某一个channel对应的多个feature map如何得到一个channel的feature map...
查看>>
IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程
查看>>
动态规划~~矩阵链乘法
查看>>
Leetcode N-Queens II
查看>>
CodeForces 721C Journey(拓扑排序+DP)
查看>>
【概率论】3-7:多变量分布(Multivariate Distributions Part I)
查看>>
常用PY库
查看>>
排序 之 堆排序 归并排序
查看>>
linux查看修改线程默认栈空间大小(ulimit -s)
查看>>
BZOJ 1477 青蛙的约会 【扩展欧几里得】
查看>>
用phpexcelreader将excel文件读入到mysql中(转载)
查看>>
As3 Socket高低位
查看>>
15. 三数之和
查看>>