zoukankan      html  css  js  c++  java
  • 另一个版本的addEvent与removeEvent

    主要是在内存泄漏上的改进

    (function() {
    	window.EventUtils = {
    		eventFuncs : [],
    
    		addEvent : function(o, n, f) {
    			var el, id;
    
    			// Resolve element by id if needed
    			o = typeof(o) == 'string' ? document.getElementById(o) : o;
    
    			if (o.attachEvent) {
    				// Since we can't use attachEvent we need to generate an unique id for the object
    				// and place functions in an array one for each object
    				el = EventUtils.eventFuncs;
    				id = o._evtID;
    
    				if (!el[id]) {
    					// Generate new unique id
    					id = o._evtID = el.length;
    
    					// Add event listener old fashion way instead of attachEvent
    					o['on' + n] = function() {
    						var i, l, e = window.event, li;
    
    						e.target = e.srcElement; // Force W3C style
    
    						// Execute each event listener in order
    						for (i = 0, li = el[e.target._evtID], l = li.length; i < l; i++)
    							li[i](e);
    					};
    
    					// Create array with first function
    					el[id] = [f];
    				} else
    					el[id].push(f); // Push in more functions
    
    				// Fix the IE leak
    				o = null;
    			} else if (o.addEventListener)
    				o.addEventListener(n, f, false);
    			else
    				o['on' + n] = f;
    
    			return f;
    		},
    
    		removeEvent : function(o, n, f) {
    			var i, li;
    
    			// Resolve element by id if needed
    			o = typeof(o) == 'string' ? document.getElementById(o) : o;
    
    			if (o.detachEvent) {
    				li = EventUtils.eventFuncs[o._evtID];
    
    				if (li) {
    					// Detach event listener by looking for it and remove it from the array
    					for (i = 0; i < li.length; i++) {
    						if (li[i] === f)
    							li.splice(i, 1);
    					}
    				}
    			} else if (o.removeEventListener)
    				o.removeEventListener(n, f, false);
    			else
    				o['on' + n] = null;
    		}
    	};
    })();
    

  • 相关阅读:
    kubernetes 在pod内无法ping通servicename和ClusterIP的解决方法
    最小安装的服务器怎么使用nm-connection-editor
    CentOS 系统升级系统内核版本
    kubernetes学习资料
    Docker学习笔记--(超详细)
    Cheat Engine 注入++: (密码=31337157)
    Jupyter-Notebook开机自启动
    kali远程桌面-krdp
    Win10 快捷方式小箭头及小盾牌如何替换
    NumPy学习心得(二)
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1634739.html
Copyright © 2011-2022 走看看