#原生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的選項卡組件開發