[オリジナル]jsバインディング帯パラメータのイベント
2887 ワード
もっと読む
JavaScriptでは、パフォーマンスと制御の分離を実現するために、0レベルのDOMイベント属性または2レベルのイベントモデルによって実現することができますが、この2つは、あるイベントタイプに対して、対応するイベントのハンドルを呼び出す際には、イベントのハンドルにパラメータを提供できません.つまり、イベント属性の値は関数参照のみとなります.
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);
};
}
};