IE8事件模型和DOM事件模型有何不同?如何处理DOM事件模型与IE8事件模型的兼容性?

1 事件模型不一样

    DOM的浏览器兼容性问题:事件模型   3个阶段            01 外向内:捕获           02 目标触发            03内向外:冒泡

    IE8: 2个阶段:   没有捕获阶段 ,只有两个阶段  。   目标触发  和 冒泡阶段

2事件绑定不一样  

      DOM: elem.addEventListener(“click”,function(){},false)      第三个参数capture: 是否在捕获阶段就提前触发

      IE8:    elem.attachEvent(“onclick”,function(){})    事件名一定要 用on开头

3移除事件   

    DOM: elem.removeEventListener(“click”,function(){},false)

     IE: elem.detachEvent(“onclick”,function(){})

4获取事件对象event的方法

    DOM: elem.addEventListener(“click”,function(e){ e->event })

      IE8: 不会自动传入事件对象e

     事件对象event始终保存在一个全局变量window.event中

     elem.attachEvent(“onclick”,function(){

        var e=window.event

       })

兼容所有浏览器的做法:      e=e||window.event;

5获取目标元素

    DOM: e.target

    IE8: e.srcElement

兼容所有浏览器的写法:   var target=e.target||e.srcElement;

6阻止冒泡: 

    DOM:   e.stopPropagation()

    IE8:       e.cancelBubble=true;     ---- kan sao babao

兼容所有浏览器的写法:

    if(e.cancelBubble!==undefined){ //IE8

      e.cancelBubble=true;

    }else{ //DOM

      e.stopPropagation()

      }

7阻止默认行为

    DOM: e.preventDefault();

    IE8 :   return false;  或者  e.returnValue = false;

    if(typeof e.preventDefault!=='function'){
         e.returnValue = false;
    }else{
      e.preventDefault()
    }
<!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" content="ie=edge">
<title>Document</title>
</head>
<body>
<button id="btn">点击</button>
<script>
// 定义一个函数,可以支持所有浏览器中的处理函数绑定:
function bindEvent(elem, eventName, handler){
if(elem.addEventListener){//DOM
elem.addEventListener(eventName,handler)
alert('dom')
}else{//IE8
elem.attachEvent('on'+eventName,function(){
//this->elem
alert('ie')
var e=window.event;
e.target=e.srcElement;
handler.call(this,e)
})
}
}
bindEvent(btn, 'click', function(e){
this //当前事件冒泡到的父元素
var target=e.target; //目标元素
}) </script>
</body>
</html>

DOM IE 兼容性 I的更多相关文章

  1. 关于Win8对getElementsByTagName等dom方法兼容性的替代方法

    在对Twebbrowser进行dom编程时,引用MSHTML并使用其中的HTMLDocument; IHTMLElementCollection;IHTMLElement;能获得较好的代码提示 其中封 ...

  2. DOM的概念(1)

    什么是DOM? 通过 JavaScript,您可以重构整个HTML文档.您可以添加.移除.改变或重排页面上的项目.要改变页面的某个东西,JavaScript就需要对HTML文档中所有元素进行访问的入口 ...

  3. bom和dom总结

    BOM1.1    介绍    1.BOM是browser object model的缩写,简称浏览器对象模型    2.BOM提供了独立于内容而与浏览器窗口进行交互的对象    3.由于BOM主要用 ...

  4. Javascript.//DOM

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.Document Object Model的历史可以追溯至1990年代后期微 ...

  5. HTML DOM(一):认识DOM

     分类: HTML/JavaScript/CSS(10)  版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/ghsau. 什么是DOM?       通过 Jav ...

  6. DOM (文档对象模型(Document Object Model))

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象 ...

  7. DOM的的概述

    DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个HTML或XML文档的常用方法.有 ...

  8. DOM的使用

    1. 修改: 3样: 1. 内容: 3个属性: 1. 获取或修改原始HTML片段: 元素.innerHTML 2. 获取或修改纯文本内容: 元素.textContent vs innerHTML 1. ...

  9. 从零开始学习jQuery (三) 管理jQuery包装集

    本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...

随机推荐

  1. vue2.0 之 深入响应式原理

    实例demo<div id="app"> <span>{{a}}</span> <input type="text" ...

  2. Vue----项目增加百度统计

    到百度统计->注册账号->新增网址->获取代码 在Vue单页面开发中接入百度统计代码时,如果直接按照官网的走会出现错误,就是_hmt找不到,这是因为在一个js文件里声明的变量在另一个 ...

  3. http各个状态码的含义

    http各个状态码的含义:由三位数字组成,第一位定义了状态码的类型 常见状态码及解决方法 404:找不到,地址错误 500:逻辑错误 400:一般是入参不匹配 504:超时 2开头:(请求成功)表示成 ...

  4. drf 搜索功能

    from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets fr ...

  5. CodeChef Max-digit Tree(动态规划)

    传送门. 题解: 最主要的问题是如何判断一个数是否合法,这就需要发现性质了. 这个状态划分还是不太容易想到, 每次加的数\(∈[0,k)\),也就是个位一直在变变变,更高的位每次都是加一,这启发我们状 ...

  6. linux运维、架构之路-Nginx反向代理

    一. Nginx负载均衡和反向代理知识 1.集群概念   一堆服务器合作做同一件事,这些机器可能需要整个技术团队架构.设计和统一协调管理,这些机器可以分布在一个机房,也可以分布在全国各个地区的多个机房 ...

  7. C#中如何通过点击按钮切换窗口

    实现方法如下: 1.设计  首先在左侧放一个panel,右侧放一个panel(命名为pnlMain),调整大小,在左侧panel里放置两个按钮(多个按钮同理) 2.在按钮里面写方法 在[命名规范检查] ...

  8. 20180708-Java基本数据类型

    public class PrimitiveTypeTest{ public static void main(String[] args){ //byte System.out.println(&q ...

  9. php常见五种设计模式

    php面向对象基础知识 请点击查看 一.常见的设计模式主要有23种,根据使用目标的不同可以分为以下三大类:创建设计模式.结构设计模式.行为模式创建设计模式: (5种)用于创建对象时的设计模式.初始化对 ...

  10. (转)深入理解Linux修改hostname

    当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问题给我好好上了一课,很多知识点,当你觉得你已经掌握的时候,其实你了解的还只是皮毛.技术活,切勿浅尝则止! ...