DOM基础教程之事件对象

浏览器中的事件都是以对象的形式存在的,同样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;
}

浏览器在获取了事件的对象后就可以通过它的一系列属性和方法处理各种事件了,例如鼠标事件,键盘事件和浏览器事件。等

以下罗列了常用的属性和方法:

从以上可以看出,两类浏览器还是有一些相似之处,例如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;

这种方法在其它属性中也是常用的。

(0)

相关推荐

  • jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果

    但感觉这样写很没意思. jquery的优势就是简单的代码就能带来更好的用户体验. 所以就找几个我感觉实用的例子,拿出来介绍下.顺带把其中用到的操作和事件介绍下. html代码: <input type="text" id="address" value="请输入邮箱地址"/> jquery代码: 复制代码 代码如下: $(document).ready(function(){ $('#address').focus(function(

  • jQuery 选择器、DOM操作、事件、动画

    Jquery选择器 $(document).ready(function(){}) $(function(){}) 如果获取的对象是jQuery对象,那么在变量前面加上$,例如:var $variable=jQuery对象 选择器 1, 判断页面是否存在某元素:if($("#tt").length>0){} 或者if($("#tt")[0]){}; 2, 基本选择器 $("#test") 选择id为test的元素 $(".test

  • DOM基础教程之事件类型

    对于用户事件类型而言,最常用的是鼠标.键盘.浏览器. 1.鼠标事件: 鼠标的事件都频繁使用,下面例子就测试各种鼠标事件 复制代码 代码如下: <script language="javascript">             function handle(oEvent) {                 var disp = document.getElementById("display");                 if (window

  • html的DOM中Event对象onabort事件用法实例

    本文实例讲述了html的DOM中Event对象onabort事件用法.分享给大家供大家参考.具体分析如下: onabort 事件会在图像加载被中断时发生. 当用户在图像完成载入之前放弃图像的装载(如单击了 stop 按钮)时,就会调用该句柄. 语法: 复制代码 代码如下: onabort="SomeJavaScriptCode" SomeJavaScriptCode 必需.规定该事件发生时执行的 JavaScript. 支持该事件的 HTML 标签: <img> 支持该事件

  • jQuery 处理页面的事件详解

    在之前dom操作中提到了javascript对事件处理的介绍.由于不同浏览器处理事件各不相相同,这给开发者带来了不必要的麻烦,jQuery的方便的解决了这个方面的麻烦. 1.绑定事件监听 (http://www.jb51.net/article/60096.htm)对事件的监听做了详细的介绍,看到了iE和DOM标准浏览器对待事件监听的区别,并对多个监听事件执行顺序和方式也不相同. 在jQuery中,通过bind()对事件绑定,相当于IE浏览器的attachEvent()和标准DOM的addEve

  • html的DOM中Event对象onblur事件用法实例

    本文实例讲述了html的DOM中Event对象onblur事件用法.分享给大家供大家参考.具体分析如下: onblur 事件会在对象失去焦点时发生. 语法如下: 复制代码 代码如下: onblur="SomeJavaScriptCode" SomeJavaScriptCode 必需.规定该事件发生时执行的 JavaScript. 支持该事件的 HTML 标签: <a>, <acronym>, <address>, <area>, <

  • jquery中dom操作和事件的实例学习-表单验证

    很显然,这样做能提升更好的用户体验. html代码: 复制代码 代码如下: <form method="post" action=""> <div class="int"> <label for="username">用户名:</label> <input type="text" id="username" class="r

  • jquery中dom操作和事件的实例学习 下拉框应用

    今天这个demo是有关下拉框的. 复制代码 代码如下: <div class="centent"> <select multiple="multiple" id="select1" style="width:100px;height:160px;"> <option value="1">选项1</option> <option value="2

  • DOM 中的事件处理介绍

    该接口提供了 'addEventListener' 和 'removeEventListener' 方法,用来绑定或解绑一个 EventListeners 接口到一个 EventTarget. DOM 2 Events 中定义了 Event 接口,用来提供事件的上下文信息,它提供了若干标准属性和方法. 实现 Event 接口的对象一般作为第一个参数传入事件处理函数,以用来提供当前事件相关的一些信息. 事件注册 根据 DOM 2 Events 中描述,节点使用 'addEventListener'

  • DOM 事件流详解

    1.冒泡型事件 浏览器的事件模型分两种:捕获型事件和冒泡型事件.由于ie不支持捕获型事件,所以以下主要以冒泡型事件作为讲解. (dubbed bubbling)冒泡型指事件安装最特定的事件到最不特定的事件逐一触发. 复制代码 代码如下: <body onclick="add('body<br>')">         <div onclick="add('div<br>')">             <ponc

  • DOM3中的js textInput文本事件

    与keypress不同的是,该事件只会在用户输入可视字符时触发,而keypres事件则只要按下键即触发(如CapsLock,Backspace). 可看到textInput考虑的主要是字符,可以通过事件对象的data属性获取所输入字符. 示例 DOM3 event textInput function addEvent(el,type,fn){ if(el.addEventListener){ el.addEventListener(type, fn, false); }else{ el.att

随机推荐