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 相关文章推荐
学习js所必须要知道的一些
Mar 07 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
jquery 3D 标签云示例代码
Jun 12 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
Vue不能观察到数组length的变化
Jun 08 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 jQuery
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
小程序实现图片移动缩放效果
May 26 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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多维数组排序array详解
2017/11/21 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
js中的string.format函数代码
2020/08/11 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
JS跨域问题详解
2014/11/25 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
js实现select下拉框选择
2020/01/11 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python实现飞行棋游戏
2020/02/05 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
python中os.remove()用法及注意事项
2021/01/31 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
电工工作职责范本
2014/02/22 职场文书
岗位说明书怎么写
2014/07/30 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
学校党员干部承诺书
2015/05/04 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书