想要兼容IE678,少用原型,因为它们没有完全实现ECMA-262规范

 (function(window){
//兼容IE678时少用原型,因为它没有完全遵循ECMA-262规范 //衬垫代码:isArray方法的兼容方案
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
} //衬垫代码:every数组过滤方法的兼容方案
if (!Array.prototype.every){
Array.prototype.every = function(fun /*, thisArg */)
{
'use strict'; if (this === void 0 || this === null)
throw new TypeError(); var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== 'function')
throw new TypeError(); var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++)
{
if (i in t && !fun.call(thisArg, t[i], i, t))
return false;
} return true;
};
} var bear = {
//该函数是一个全兼容的事件绑定函数,但只能处理一个事件回调函数
addListener: function(node,name,fn){
if(node.addEventListener){
node.addEventListener(name,fn);
}else{
node.attachEvent("on"+name,function(){
fn.call(node);
})
}
}, //该函数是一个全兼容的事件绑定函数,能处理一个回调数组
addMoreListener: function(node,name,arr){
if(typeof arr === "function"){
bear.addListener(node,name,arr);
}else if(Array.isArray(arr)&&arr.length){
if(node.addEventListener){ }else if(node.attachEvent){
arr = arr.reverse();
}
var flag = arr.every(function(item){
return typeof item === "function";
})
if(flag){
for(var i=0;i<arr.length;i++){
bear.addListener(node,name,arr[i]);
}
}else{
throw new Error("数组内元素类型有误");
}
}else{
throw new Error("第三参数类型有误或为空数组");
}
}
} window.bear = bear;
})(window)

测试代码

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
#app{
width: 100px;
height: 100px;
background: #F4A460;
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
margin: auto;
font: 20px/100px helvetica;
text-align: center; }
</style> <script src="./js/bear-extend-event2.js"></script>
<script>
window.onload = function(){ var appNode = document.getElementById("app");
var arr = [function(){console.log(1);},function(){console.log(2);}]
//debugger
bear.addMoreListener(appNode,"click",arr);
}
</script>
</head>
<body>
<div id="app">app</div>
</body>
</html>

IE兼容事件绑定V1.0的更多相关文章

  1. ie低版本内核事件兼容问题(事件绑定,绑定事件自动执行,文档模式问题)

    问题情况 搜狗等,兼容模式下,以前前端写的点击事件的代码没有, 后来一看是因为兼容模式为9,导致点击事件失效 解决办法,步骤 1,处理绑定事件兼容问题 ie低版本绑定事件只支持attactevent, ...

  2. 兼容IE9以下和非IE浏览器的原生js事件绑定函数

    事件绑定函数的demo如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "htt ...

  3. 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent

    兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent   ;(function(){ // 事件绑定 bi ...

  4. jQuery 2.0.3 源码分析 事件绑定 - bind/live/delegate/on

    事件(Event)是JavaScript应用跳动的心脏,通过使用JavaScript ,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应 事件的基础就不重复讲解了,本来是定位源码分析 ...

  5. JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

    转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html   ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->   ...

  6. 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

    ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover……)首先发生在document上,然后依次传 ...

  7. JS+Zero Clipboard swf复制到剪贴板 兼容浏览器(bind事件绑定函数)

    转自http://www.ipmtea.net/css_ie_firefox/201107/07_499.html 1.ZeroClipboard其实是国外的一个js类库,源码结构如: var Zer ...

  8. Omi v1.0震撼发布 - 令人窒息的Web组件化框架

    原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...

  9. Omi v1.0震撼发布 - 开放现代的Web组件化框架

    原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...

随机推荐

  1. 一、commander

    #!/usr/bin/env node const program = require('commander'); const colors = require('colors'); const pk ...

  2. spring多模块项目手动整合

    一.分别创建parent entity dao service controller web等模块项目,如图: 二.parent项目添加依赖 <!-- 集中定义依赖版本号 --> < ...

  3. git总结一、工作中常用基础命令

    首先来了解两个概念: 工作区:比如你的项目目录 暂存区:git和其他版本控制系统的不同之处就是有这个暂存区的概念. .git不是工作区,而是git 版本库,在版本库中存放着很多东西,比如暂存区(sta ...

  4. ISOMAP

    转载 https://blog.csdn.net/dark_scope/article/details/53229427# 维度打击,机器学习中的降维算法:ISOMAP & MDS 降维是机器 ...

  5. Comet OJ Contest #2

    A:暴力,显然每两次至少翻一倍. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf ...

  6. [BJOI2017]树的难题

    题目描述 给你一棵 n 个点的无根树. 树上的每条边具有颜色.一共有 m 种颜色,编号为 1 到 m.第 i 种颜色的权值为 ci. 对于一条树上的简单路径,路径上经过的所有边按顺序组成一个颜色序列, ...

  7. LOJ子序列

    题目描述 https://loj.ac/problem/6074 题解 对于子序列的dp,我们可以设置一个dp. 我们设dp[i]表示以i这个字符结尾的子序列个数,转移为dp[i]+=∑dp[k]-d ...

  8. BZOJ2882工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  9. EditText以及登录UI实现

    EditText是可以输入的文本框 <?xml version="1.0" encoding="utf-8"?><RelativeLayout ...

  10. 06--STL序列容器(priority_queue)

    一:优先队列priority_queue简介 同队列,不支持迭代 (一)和队列相比 同: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素. 异: 但是它有一个特性,就是队列中最大的元素总是 ...