锁定老帖子 主题:给事件handler传参数-初学者的困惑
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-04
包装过的function,移除事件的时候,又变得麻烦。
function w3cHandleEvent(elem,type,func) { var _args=Array.apply([],arguments).slice(3); elem.addEventListener(type,function(e){ func.apply(this,[e].concat(_args)); },false); } function xx(e,a,b,c) { alert([e,"-",a,"-",b,"-",c,"-",this]); } w3cHandleEvent(document.getElementById('aa'),"click",xx,5,6,7); |
|
返回顶楼 | |
发表时间:2010-10-07
感觉第一种方法不错!
|
|
返回顶楼 | |
发表时间:2010-10-15
var E = { _fns:{}, _wrapped: function(type, fn, context){//一个便于传递更多函数上下文参数的包装函数 var me = this; var wfn = function(e){ fn.apply(me || window, [e, context]); } this._fns[type] = [fn, wfn];//把fn和wfn都缓存起来,在Unload时强制释放以免IE内存泄露 return wfn; }, on : function(el, type, fn, context){ el.addEventListener ? el.addEventListener(type, this._wrapped(type, fn, context), false) : el.attachEvent("on" + type, this._wrapped(type, fn, context)); } }; var v1 = 'jack', v2 = 'lily'; //如此传递上下文参数岂不更加自然,又避免给Function加一个用途很窄且不必要的原型函数 E.on(document.getElementById('aa'), 'click', function(e, arg){ alert(e) alert(arg); }, [v1,v2]); |
|
返回顶楼 | |