DOM基础教程之事件对象


Posted in Javascript onJanuary 20, 2015

浏览器中的事件都是以对象的形式存在的,同样ie浏览器与标准dom浏览器之间存在获取事件对象上也存在差别。在ie浏览器中事件对象是windows对象的一个属性event,访问通常采用如下方法。

oP.onclick = function(){

var oEvent = window.event;

}

尽管它是window对象属性,但event对象还是只能在事件发生时被访问,所有的事件处理函数执行完之后,该对象就消失了。

而标准的dom规定event对象必须作为唯一的参数传给事件处理函数。一次在类似火狐浏览器中访问事件对象通常作为参数,代码如下:

oP.onclick = function(oEvent){

}

因此,为了兼容两种浏览器,通常采用下面的方法

oP.onclick = function(oEvent){

if(window.event)oEvent = window.event; 

}

浏览器在获取了事件的对象后就可以通过它的一系列属性和方法处理各种事件了,例如鼠标事件,键盘事件和浏览器事件。等

以下罗列了常用的属性和方法:

DOM基础教程之事件对象

从以上可以看出,两类浏览器还是有一些相似之处,例如type属性便是各种浏览器所兼容的,它表示获取事件的类型,返回类似“click”,“mousemove”之类的值。

这对于同一个函数处理多个种类事件十分有用。

如下:同一个函数 处理多种事件。

<script language="javascript">

            function handle(oEvent) {

                var disp = document.getElementById("display");

                if (window.event) oEvent = window.event; //处理兼容性,获得对象

                if (oEvent.type == "click")

                    disp.innerHTML += "你点击了我!";

                else if (oEvent.type == "mouseover")

                    disp.innerHTML += "你移动到我的上面";

            }

            window.onload = function() {

                var oP = document.getElementById("box");

                oP.onclick = handle;

                oP.onmouseover = handle;

            }

        </script>

        <div>

            <div id="box" style="width:100px;height:100px;background:#ddd;"></div>

            <p id="display">Click Me</p>

        </div>

以上代码给id="box"的div添加了两个事件响应函数,而这两个事件却是同一个函数

在这函数中首先考虑兼容获得事件对象,然后利用type属性盘对事件的名称。

在检测shift、alt、ctrl这三个按键时,两类浏览器使用的方法也完全一样,都具有 shiftKey,altKey,ctrlKey这三个属性,

代码如下:

var bShift = oEvent.shiftKey;

var bAlt = oEvent.altKey;

var bCtrl = oEvent.ctrlKey;

另外,在获取鼠标指针上,两类浏览器使用的方法都一样,都具有clientX、clientY和screenX、screenY。

其中,clientX和clientY表示鼠标在客户端区域的位置,不包括浏览器的状态栏,菜单栏等。

代码如下:

var iClientX = oEvent.clientX;

var iClientY = oEvent.clientY;

而screenX和sreenY则指的是鼠标在整个计算机屏幕的位置,代码是

var iScreenX = oEvent.screenX;

var iScreenY =  oEvent.screenY;

很多时候,开发者想知道事件是由那个对象触发的,即事件的目标(target)。

假设<p>元素分配onclick事件处理函数,触发click事件时<p>就会被认为是目标。

在IE浏览器中,目标包含在event对象的srcElement属性中,代码如下

var oTarget = oEvent.srcElement;

而在标准的DOM浏览器中,目标则包含在target属性中,代码如下

var oTarget = oEvent.Target;

获取事件的目标

<script language="javascript">

            function handle(oEvent) {

                var disp = document.getElementById("display");

                if (window.event) oEvent = window.event; //处理兼容性,获得对象

                var oTarget;

                if (oEvent.srcElement) //处理兼容性,获得事件

                    oTarget = oEvent.srcElement;

                else

                    oTarget = oEvent.target;

                disp.innerHTML += "元素名称:" + oTarget.tagName +"<br>" +  "元素内容:" + oTarget.textContent + "<br>"

                +  "之前紧随的节点:" + oTarget.textContent + "<br>" 

                ;

            }

            window.onload = function() {

                var oP = document.getElementById("box");

                oP.onclick = handle;

            }

        </script>

        <div>

            <div id="box" style="width:100px;height:100px;background:#ddd;">

                box内容

            </div>

            <p id="display"></p>

        </div>

(补充)Element 对象的属性 http://www.w3school.com.cn/xmldom/dom_element.asp

 (补充)Element 对象的方法 http://www.w3school.com.cn/xmldom/dom_element.asp

由于事件的目标在两类浏览器上不同,因此代码必须保证兼容性,通常的做法就是直接将对象作为if语句的条件,代码如下

    if (oEvent.srcElement)

                    oTarget = oEvent.srcElement;

                else

                    oTarget = oEvent.target;

这种方法在其它属性中也是常用的。

Javascript 相关文章推荐
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
jquery实现的横向二级导航效果代码
Aug 26 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
微信JSAPI Ticket接口签名详解
Jun 28 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
js实现无缝轮播图效果
Mar 09 Javascript
Vue事件处理原理及过程详解
Mar 11 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 #Javascript
js实现的捐赠管理完整实例
Jan 20 #Javascript
JS自定义对象实现Java中Map对象功能的方法
Jan 20 #Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 #Javascript
DOM基础教程之使用DOM + Css
Jan 20 #Javascript
jquery+ajax实现跨域请求的方法
Jan 20 #Javascript
嵌入式iframe子页面与父页面js通信的方法
Jan 20 #Javascript
You might like
php实现水仙花数的4个示例分享
2014/04/08 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
javascript数组的使用
2013/03/28 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
django基础学习之send_mail功能
2019/08/07 Python
YUV转为jpg图像的实现
2019/12/09 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
易程科技软件测试笔试
2013/03/24 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
求职推荐信范文
2013/12/01 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
迎国庆横幅标语
2014/10/08 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
微信小程序实现录音Record功能
2021/05/09 Javascript
PHP 时间处理类Carbon
2022/05/20 PHP