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 相关文章推荐
jQuery 入门讲解1
Apr 15 Javascript
JS Excel读取和写入操作(模板操作)实现代码
Apr 11 Javascript
基于JQuery的一句话搞定手风琴菜单
Sep 14 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
May 11 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 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 中dirname(_file_)讲解
2007/03/18 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
深入解析php之sphinx
2013/05/15 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
做网页的一些技巧
2007/02/01 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JS变量及其作用域
2017/03/29 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
Python进行统计建模
2020/08/10 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
青年教师个人总结
2015/02/11 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android