自定義事件:讓一個函數可以具有事件的某些特性。主要是跟函數有關。函數
咱們都知道,相同名字的函數會被覆蓋,如:spa
function show(){ alert(1); } function show(){ alert(2); } function show(){ alert(3); } show() //這時只會彈出3,由於最後定義的show函數將前邊的覆蓋了。
當咱們換一種寫法,將它寫成事件的樣子,就不會覆蓋:code
window.addEventListener('show',function(){ alert(1); },false); window.addEventListener('show',function(){ alert(2); },false); window.addEventListener('show',function(){ alert(3); },false); show(); //觸發自定義事件
其實show仍是函數,只是讓它具備了事件的特性。這樣添加的事件不會覆蓋。blog
自定義事件:事件
//添加自定義事件io
function addEvent(obj,events,fn){ obj.handlers=obj.handlers||{}; obj.handlers[events]=obj.handlers[events] || []; obj.handlers[events].push(fn); if(obj.addEventListerner){ obj.addEventListerner(events,fn,false); }eles{ obj.attachEvent('on'+events,fn); } }
//主動觸發自定義事件event
function fireEvent(obj,events){ if(obj.handlers[events]) { for (var i=0;i<obj.handlers[events].length;i++){ obj.handlers[events][i](); } } } addEvent(oDiv,'show',function(){ alert(3); }); addEvent(oDiv,'show',function(){ alert(4); }); fireEvent(oDiv,'show'); //3,4