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 相关文章推荐
firefox下frameset取不到值的解决方法
Sep 06 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 Javascript
详解AngularJS中的filter过滤器用法
Jan 04 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
详解AngularJS 模块化
Jun 14 Javascript
Bootstrap4 gulp 配置详解
Jan 06 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
element中el-container容器与div布局区分详解
May 13 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
May 16 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将数据导入到Foxmail
2006/10/09 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
int在python中的含义以及用法
2019/06/27 Python
python读写配置文件操作示例
2019/07/03 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
销售主管岗位职责
2014/02/08 职场文书
后备干部考察材料
2014/02/12 职场文书
优秀教师演讲稿
2014/05/06 职场文书
争做文明公民倡议书
2014/08/29 职场文书
租车协议书范本2014
2014/11/17 职场文书
污水处理保证书
2015/05/09 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android