#原生JS实现自定义事件
```
<script>
window.onload = function(){
var oDiv = document.getElementById('div1');
var oSpan = document.getElementById('span1');
bindEvent(oDiv, 'click', function () {
alert(1);
});
bindEvent(oDiv, 'click', function () {
alert(2);
});
bindEvent(oSpan, 'show', function () {
alert(3);
});
bindEvent(oSpan, 'show', function () {
alert(4);
});
bindEvent(oSpan, 'hide', function () {
alert(5);
});
fireEvent(oDiv, 'click'); // 弹出1和2
fireEvent(oSpan, 'show'); // 弹出3和4
fireEvent(oSpan, 'hide'); // 弹出5
};
function bindEvent(obj, events, fn){
//obj:楼层
//events:书架
//fn:一本书
obj.listeners = obj.listeners || {};
obj.listeners[events] = obj.listeners[events] || [];
obj.listeners[events].push(fn);
if(obj.addEventListener){
obj.addEventListener(events, fn, false);
}else{
obj.attachEvent('on'+events, fn);
}
}
function fireEvent(obj, events){ // 主动触发自定义事件
for(var i=0; i<obj.listeners[events].length; i++){
obj.listeners[events][i]();
}
}
</script>
<div id="div1">div</div>
<span id="span1">span</span>
```
- 01 JS面向对象及组件开发
- 02 传统的过程式编写选项卡
- 03 用面向对象封装通用选项卡
- 04 控制多个选项卡自动播放
- 05 用面向对象编写拖拽
- 06 JS面向对象及组件开发
- 07 hasOwnProperty和constructor的使用
- 08 instanceof运算符的使用
- 09 利用toString做类型判断
- 10 什么是面向对象的继承
- 11 面向对象之拷贝继承
- 12 编写继承的拖拽
- 13 继承的其他形式之类式继承
- 14 继承的其他形式之原型继承
- 15 组件开发是什么
- 16 给拖拽组件配置不同参数
- 17 封装弹框组件
- 18 使用对象标记已弹出弹框
- 19 复杂组件开发之自定义事件
- 20 原生JS实现自定义事件
- 21 自定义事件实例
- 22 基于JQ的选项卡组件开发