[オリジナル]jsバインディング帯パラメータのイベント


もっと読む
JavaScriptでは、パフォーマンスと制御の分離を実現するために、0レベルのDOMイベント属性または2レベルのイベントモデルによって実現することができますが、この2つは、あるイベントタイプに対して、対応するイベントのハンドルを呼び出す際には、イベントのハンドルにパラメータを提供できません.つまり、イベント属性の値は関数参照のみとなります.
function Handler() {
};
Handler.prototype = {
/* 
*  eventType        element  ,   handler         
*    IE   Firefox      
* 
* @param element           (Object) 
* @param eventType        (String),  “on” 
* @param handler     (Function) 
*/
	registerEvent : function(element, eventType, handler) {
		if (element.attachEvent) { //2 DOM      
			element.attachEvent('on' + eventType, handler);
		} else if (element.addEventListener) {
			element.addEventListener(eventType, handler, false);
		} else { //0 DOM      
			element['on' + eventType] = handler;
		}
	},
/* 
*               
* 
* @param obj               ,null    window    
* @param func              
* @param ...                    ,  0       
*/
	bind : function(obj, handler,arguments) {
		obj = obj || window;
		var args = [];
		for ( var i = 2; i < arguments.length; i++) {
			args.push(arguments[i]);
		}
		return function() {
			handler.apply(obj, args);
		};
	}
};

//        : 
function show(txtObj) {
	alert(txtObj.value);
	txtObj.focus();
	txtObj.select();
}
window.onload = function() {
	var handler = new Handler();
	handler.registerEvent($("txt"), "change", handler.bind(null, show, $("txt")));
//  2         
$("txt").onchange = handler.bind(null,show,$("txt"));//JavaScript        
};
 使い方:
Ext.onReady(function() {
	var handler1 = new Handler();
	handler1.registerEvent(getId(FID_ResidenceMigration), 'click', handler1.bind(null, changeTd, new Array(FID_ResidenceMigration, 'tdate1')));
});

function getId(id) {
	return document.getElementById(id);
}

//  js
function Handler() {
};
Handler.prototype = {
	registerEvent : function(element, eventType, handler) {
		if (element.attachEvent) { //2 DOM      
			element.attachEvent('on' + eventType, handler);
		} else if (element.addEventListener) {
			element.addEventListener(eventType, handler, false);
		} else { //0 DOM      
			element['on' + eventType] = handler;
		}
	},
	bind : function(obj, handler, arguments) {
		obj = obj || window;
		var args = [];
		for ( var i = 0; i < arguments.length; i++) {
			args.push(arguments[i]);
		}
		return function() {
			handler.apply(obj, args);
		};
	}
};