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中的apply()方法和call()方法使用介绍
Jul 25 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
Mar 04 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
Jul 16 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
Node.js事件驱动
Jun 18 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
Vue2 轮播图slide组件实例代码
May 31 Javascript
JSON的parse()方法介绍
Jan 31 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 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
在字符串中把网址改成超级链接
2006/10/09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php表单处理操作
2017/11/16 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
非常好的js代码
2006/06/27 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
JSON Web Tokens的实现原理
2017/04/02 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
中国好声音华少广告词
2014/03/17 职场文书
优秀员工推荐信
2014/05/10 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL