document.write('
解析:
关于 JavaScript 中的事件监听大家用得比较多了,无非是判断浏览器是否支
持 addEventListener 和 attachEvent,网上搜索关于事件监听的方法也很多,但是
总有些不是很完善。下面的方法中对于添加事件监听的方法是一样的,只不过
在取消事件绑定上做了点“手术”,现在可以支持匿名函数的使用,所以在绑定
事件时不再需要给函数单独命名了。
主要代码如下:
/ * 绑定事件与取消绑定 */
var handleHash = {};
var bind = (function() {
 if (window.addEventListener) {
 return function(el, type, fn, capture) {
 el.addEventListener(type, function(){
 fn();
 handleHash[type] = handleHash[type] || [];
 handleHash[type].push(arguments.callee);
 }, capture);
 };
 } else if (window.attachEvent) {
 return function(el, type, fn, capture) {
 el.attachEvent("on" + type, function(){
 fn();
 handleHash[type] = handleHash[type] || [];
 handleHash[type].push(arguments.callee);
 });
 };
 }
})();
var unbind = (function(){
 if (window.addEventListener) {
 return function(el, type ) {
 if(handleHash[type]){
 var i = 0, len = handleHash[type].length;
 for (i; i<len ; i += 1){
 el.removeEventListener(type,
 handleHash[type][i]);
 }
 };
 };
 } else if (window.attachEvent) {
 return function(el, type) {
if(handleHash[type]){
 var i = 0, len = handleHash[type].length;
 for (i; i<len ; i += 1){
 el.detachEvent("on" + type,
 handleHash[type][i]);
 }
 };
 };
 }
})();
原理解析:
handleHash 用作哈希表缓存事件的 function,handleHash[\' 事件名称 \'] 是
一个数组,用来添加多个事件监听的方法,当需要移除哪个事件时,遍历
handleHash[\' 事件名称 \'] 的数组,然后移除。
使用方法:
bind(obj,\'click\',function(){
 alert (\'click\');
});

unbind(obj,\'click\');  

');