IE中DOM0级事件处理程序跟DOM2级事件处理程序中作用域(this)的区别

一:在布局中直接添加事件处理

  <div id="div1" onclick="fOne();"></div> 

  <script>
    var oDiv1 = document.getElementById("div1");
    function fOne(){
      alert(this===window);//true
    }
  </script>

  弹出true,是因为在布局中调用的时候省略了window,全面的应该是window.One();

二:所有浏览器都支持DOM0级事件处理程序,且使用该方式时,事件处理程序是在元素的作用域中运行,因此程序中的this都是指向元素。

var oDiv1 = document.getElementById("div1");
oDiv1.onclick = function(){
  alert(this===oDiv1);//true
}

移出事件处理:

  oDiv1.onclick = null;

目前为止,我还是非常喜欢DOM0级事件处理程序的,没有浏览器兼容性问题;

三:DOM2级事件处理程序(事件监听机制)可以给同一个元素依次添加多个事件处理;

以下是事件监听机制在使用时的注意事项:

  IE9(含)以上,firefox,chrome,safari使用以下方法: 

  var oDiv1 = document.getElementById("div1");
  function fOne(){
    alert(this===oDiv1);//true
  }
  oDiv1.addEventListener("click",fOne,false);

  其中各个参数的意思,自己去查w3c,http://www.w3school.com.cn/,自己动手,丰衣足食。

  移出事件处理:

  oDiv1.removeEventListener("click",fOne,false);

  只能使用这一种。

  IE8(含)以下的IE浏览器使用以下方法:

  oDiv1.attachEvent("onclick",fOne);

  移出事件处理:

  oDiv1.detachEvent("onclick",fOne);

  也是只能使用这一种。

  注意以上蓝色地方的不同;

  PS:IE9,IE10以上两种方式都支持。IE11支持的是第一种,其实,现在的IE11还是紧跟规范的,值得嘉奖……同时,也看到了未来前端开发的美好日子……

  下边还有最坑妹的地方,在IE所特有的DOM2级事件处理程序是在全局作用域中执行的,也就是说,此时的this指向的是window

  在IE8和以下的IE浏览器中测试:   

  function fOne(){
    alert(this===window);//true
  }
  oDiv1.attachEvent("onclick",fOne);

  如果你觉得这里没有必要写===,那么,O(∩_∩)O哈哈~,诡异的事情来喽~~~~

  function fOne(){
    alert(this==oDiv1);//true
  }
  oDiv1.attachEvent("onclick",fOne);

  刚开始,我也很奇怪,但是,我们单独将this弹出一下看看:

  IE8弹出的是:                                   IE7(含)以下弹出的是:

             

  IE8(含)以上的浏览器和别的浏览器除了说明this是一个对象以外,还会说明是什么类型,但是IE7(含)以下就表现的比较含蓄了……(总算IE知错能改……)

  然后,我们再弹出oDiv看看:

  IE8弹出的是:                                                  IE7(含)以下弹出的是:

              

  接下来,再弹出window看看:

  IE8弹出的是:                                             IE7(含)以下弹出的是:

                      

  从IE8的弹出框中的值我们可以看到,oDiv1跟window两个实际上值是相等的都是object,但是类型不同,这样也就解决了,为什么上面==是true,而===是false了,但是,请恕小女子才疏学浅,HTMLDivElement这个类的定义属于什么范畴的知识???请过路大神赐教……

时间: 2024-10-07 06:08:34

IE中DOM0级事件处理程序跟DOM2级事件处理程序中作用域(this)的区别的相关文章

JS:Html事件处理程序 vs DOM0级事件处理程序 vs DOM2级事件处理程序

1.HTML事件处理程序 某个元素支持的某种事件,可以通过一个与相应事件处理程序同名的HTML特性指定.这个特性的值应该是能够执行的JS代码.例如:按钮单击是要执行一些js代码,可以像下面: <input type="button" value="click me" onclick="showMessage()" /> 在js中就可以像下面一样处理: <script> function showMessage(){ ale

事件流程以及dom2级事件绑定

事件流程分为三个阶段:捕获阶段.目标阶段.冒泡阶段. 捕获阶段:事件从最顶层元素开始执行,一层层往下,直到精确元素. 目标阶段:事件在精确元素上执行. 冒泡阶段:事件从精确元素开始执行,一层层往上,直到顶层元素(注:高级浏览器的顶层元素是window,ie8以下的浏览器顶层元素是document)  DOM2级事件绑定方式   高级浏览器绑定方式: 元素.addEventListener(type, handler, boolean);             //绑定 type 事件类型字符串

js事件处理程序详解,html事件处理程序,dom0级事件处理程序,dom2级事件处理程序

博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/24/js%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3%ef%bc%8chtml%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e7%a8%8b%e5%ba%8f%ef%bc%8cdom0%e7%ba%a7%e4%ba%8b%e4%bb%b6%e5%a4%84

DOM0级事件处理和DOM2级事件处理

转自:http://www.cnblogs.com/holyson/p/3914406.html 0级DOM 分为2个:一是在标签内写onclick事件  二是在JS写onlicke=function(){}函数 1) <input id="myButton" type="button" value="Press Me" onclick="alert('thanks');" > 2) document.getEle

DOM2级事件addEventListener

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

深入理解DOM事件机制系列第二篇——事件处理程序

× 目录 [1]HTML [2]DOM0级 [3]DOM2级[4]IE[5]总结 前面的话 事件处理程序又叫事件侦听器,实际上就是事件的绑定函数.事件发生时会执行函数中相应代码.事件处理程序有HTML事件处理程序.DOM0级事件处理程序.DOM2级事件处理程序和IE事件处理程序四类,下面将详细介绍该部分内容 HTML事件处理程序 某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定.这个特性的值应该是能够执行的JavaScript代码 在事件处理程序函数内部,this

JS事件(7)——事件类型——鼠标与滚轮事件

鼠标与滚轮事件 鼠标事件 “DOM3级事件”中定义了9个鼠标事件. click:在单击主鼠标按钮(一般是左键)或者按下回车时触发:这意味着onclick事件处理程序既可以通过鼠标也可以通过键盘执行. dbclick:双击主鼠标按钮(一般是左键)或者按下回车键时触发. mousedown:按下任意鼠标按钮时触发:不能通过键盘触发. mouseup:释放鼠标按钮时触发:不能通过键盘触发. mouseenter:在鼠标光标从元素外部首次移动到元素范围之内时触发:这个事件不冒泡,而且光标移动到元素的后代

click事件和mousedown、mouseup事件

点击select标签元素的时候,会弹出下拉.然而当option中没有元素时,就不希望弹出下拉(比如在某些浏览器中,点击select会默认出一个罩层效果,而此时没有数据选择的话,弹出比较不友好). 首先想到是利用click事件控制,发现仍然会有下拉出现...实际这个是mousedown事件控制的. 这里就说明下click和mousedown.mouseup.规范要求,只有在同一个元素上相继触发 mousedown 和 mouseup 事件,才会触发 click 事件:如果 mousedown 或

深入理解DOM事件机制系列第一篇——事件流

× 目录 [1]历史 [2]事件冒泡 [3]事件捕获[4]事件流 前面的话 javascript操作CSS称为脚本化CSS,而javascript与HTML的交互是通过事件实现的.事件就是文档或浏览器窗口中发生的一些特定的交互瞬间,而事件流(又叫事件传播)描述的是从页面中接收事件的顺序.本文将详细介绍该部分的内容 历史 当浏览器发展到第四代时(IE4及Netscape4),浏览器开发团队遇到了一个很有意思的问题:页面的哪一部分会拥有某个特定的事件?想象画在一张纸上的一组同心圆.如果把手指放在圆心