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 相关文章推荐
学习ExtJS fit布局使用说明
Oct 08 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
Oct 29 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
jQuery操作input type=radio的实现代码
Jun 14 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
javascript解析json数据的3种方式
May 08 Javascript
分分钟玩转Vue.js组件
Oct 25 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
js canvas实现橡皮擦效果
Dec 20 Javascript
JQuery特殊效果和链式调用操作示例
May 13 jQuery
解决微信小程序中的滚动穿透问题
Sep 16 Javascript
js实现双色球效果
Aug 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
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
JS模拟自动点击的简单实例
2013/08/08 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
毕业生自荐书
2013/12/18 职场文书
学生实习介绍信
2014/01/15 职场文书
军训自我鉴定200字
2014/02/13 职场文书
模特大赛策划方案
2014/05/28 职场文书
2015年售票员工作总结
2015/04/29 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript