js中用实例体现attachEvent与addEventListener的区别

先普及一下基本知识:

attachEvent与addEventListener的作用:为某一事件附加其它的处理事件。

网上普遍都是说attachEvent用于非Mozilla系列,addEventListener用于Mozilla系列。

(Mozilla系列在浏览器而言,即指火狐浏览器,本人认为也可以指支持w3c标准的系列浏览器)

理论上是这么说,还是得自己动手试一试!

结合查阅资料写了以下代码进行测试:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>attachEvent与addEventListener区别</title>
    <style type="text/css">
    </style>
</head>
<body>
    <button id="btn1">点我</button>
</body>
<script type="text/javascript">
    var btn1Obj = document.getElementById("btn1");
    function method1(){
        alert("method1");
    }
    function method2(){
        alert("method2");
    }
    function method3(){
        alert("method3");
    }
    function attachEventListen(obj,e,fun){
        /*obj.attachEvent ? obj.attachEvent("on"+e,fun) : obj.addEventListener(e,fun,false);*/
        obj.attachEvent("on"+e,fun);//测试浏览器,发现:firefox、chrome、IE9、IE10、IE11、safari、opera都不兼容,IE7、IE8兼容,
        //obj.addEventListener(e,fun,false);//测试浏览器,发现:firefox、chrome、IE、safari、opera都兼容,IE7、IE8不兼容,
    }
    attachEventListen(btn1Obj,"click",method1);
    attachEventListen(btn1Obj,"click",method2);
    attachEventListen(btn1Obj,"click",method3);
</script>
</html>

运行结果注释在了上面代码中。(只测试了主流浏览器:IE7-11、firefox、chrome、opera、safari)

总结起来就是:

attachEvent——兼容:IE7、IE8;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera

addEventListener——兼容:firefox、chrome、IE、safari、opera;不兼容IE7、IE8

 由此也可以看出,从IE9开始,很多JS也已经按照W3c的标准;其他主流浏览器也在向W3c标准看齐。

网上找的attachEvent与addEventListener区别

target.addEventListener(type, listener, useCapture);
target 文档节点、document、window 或 XMLHttpRequest。
type 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener 实现了 EventListener 接口或者是 JavaScript 中的函数。
useCapture 是否使用捕捉,看了后面的事件流一节后就明白了,一般用 false
事件触发时,会将一个 Event 对象传递给事件处理程序,比如:
document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
适应的浏览器版本不同,同时在使用的过程中要注意
attachEvent方法          按钮onclick       IE中使用
addEventListener方法    按钮click       fox中使用
两者使用的原理:可对执行的优先级不一样,下面实例讲解如下:
attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
addEventListener方法 用于 Mozilla系列
举例: document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;如果这样写,那么将会只有medhot3被执行
写成这样:
var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);执行顺序为method3->method2->method1
如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);执行顺序为method1->method2->method3
实例:(要注意的是div必须放到js前面才行)

<html>
<head>
</head>
<body>
<div id="name1" style="border:1px solid red;padding:10px 10px 10px 10px;" mce_style="border:1px solid red;padding:10px 10px 10px 10px;">
<div id="name2" style="border:1px solid green;padding:10px 10px 10px 10px;" mce_style="border:1px solid green;padding:10px 10px 10px 10px;">点击</div>
</div>
<div id="info"></div>
<mce:script type="text/javascript"><!--
var name1=document.getElementById('name1'); //要注意
var name2=document.getElementById('name2'); //要注意
var info=document.getElementById('info');
if(name1.attachEvent){ //对于attachEvent前面的target我们一定要保证不为空
name1.attachEvent('onclick',function () { info.innerHTML += "红色" + "<br>"; });
name2.attachEvent('onclick',function () { info.innerHTML += "绿色" + "<br>"; });
}else{
name1.addEventListener('click',function () { info.innerHTML += "红色" + "<br>"; },false);
name2.addEventListener('click',function () { info.innerHTML += "绿色" + "<br>"; },false);
}
// --></mce:script>
</body>
</html>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试
, 实例
, chrome
, 浏览器
, 事件
ie8
js attachevent、js attachevent 参数、js中attachevent、js attachevent 兼容、js addeventlistener,以便于您获取更多的相关知识。

时间: 2024-10-06 23:53:00

js中用实例体现attachEvent与addEventListener的区别的相关文章

ie 8-浏览器兼容性中attachEvent和addEventListener这样用为啥不行?

问题描述 浏览器兼容性中attachEvent和addEventListener这样用为啥不行? HTML: <div class="cy_right"> <h3 class="tit">项目概况</h3> <ul class="cynav"> <li class="current" onclick="liClickOne(this,'merchantsInfo'

JS练习实例:javascript实现全选/全不选/反选

文章简介:JS练习实例:javascript实现全选/全不选/反选. javascript实现全选/全不选/反选 功能 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtm

js中用window.open()打开多个窗口的name问题

这篇文章主要介绍了js中用window.open()打开多个窗口的问题,需要的朋友可以参考下 当要使用window.open()去打开多个子窗口的时候,在ie7之后,都要使用不同的name,这样才能够打开出多个不同的窗口,如果name相同的话,就只能打开第一个子窗口.同事要是子窗口和父窗口有数据交换或是方法相互调用时,如果name一样,那么将会出现许多不可预测的error,所以很多问题的出现要考虑是不是由于这个原因引起的.

js中用for in 语句遍历数组问题

问题描述 js中用for in 语句遍历数组问题 var arr=new Array(3);用for循环遍历:for(var x=0;x<arr.length;x++){document.write(arr[x]);}网页上显示:undefined undefined undefined 现在用for in 遍历: for(var x in arr){ document.write(arr[x]); } 为什么网页上什么都不显示? 解决方案 这两种方式有差异的,对于第一种方式来说,在new的时候

在JS中用ajax判断登录如何写?

问题描述 在JS中用ajax判断登录如何写? 各位大神帮帮忙,这是我自己写得一个方法用的是HTML页面 public class login:System.Web.UI.Page { //private string pwd; //private int id; public LoginInFo loging() { LoginInFo lif = new LoginInFo(); lif.id = 1; lif.pwd = "123456"; lif.userName = "

node.js入门实例helloworld详解_node.js

本文实例讲述了node.js入门实例helloworld.分享给大家供大家参考,具体如下: 将下面的代码保存为:server.js存到E盘下面的node目录中. var http = require('http'); function myNode(request, response){ response.writeHead(200, {'Content-type':'text/plain'}); response.write('hello world'); //hello world resp

JS hashMap实例详解_javascript技巧

Hashmap是一种非常常用的.应用广泛的数据类型.本文通过实例代码给大家介绍js hashMap的相关知识,具体代码内容如下所示: /** * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, value) 向MAP中增加元素(key, value) * remove(key) 删除指定KEY的元素,成功返回True,失败返回False * get(key)

JS中用三种方式实现导航菜单中的二级下拉菜单_javascript技巧

我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片.那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style

JS中用childNodes获取子元素换行会产生一个子元素_javascript技巧

JS中用childNodes获取子元素换行会产生一个子元素 <div id='div1'> <div id='div2'> <div id='div3'></div> </div> <div class='div2'> </div> </div> 这样的代码 $('#div1').childNodes.length==>会等于 5哦 要是你把这些代码不换行你就会得到2 $('#div1').childNo