JavaScriptイベント属性バインディングパラメータの関数

1868 ワード

例えば、このような呼び出し方式は採用できません.element.onclick=test()element.onclick=test(arg 1,arg 2);element.onclick=function(){…}しか通しられません.あるいはelement.onclick=testという方法で実現されるので、関数にパラメータを渡すことができません.大量のネット資料を参考にして、この問題を解決する方法はコードを例にとって、下記の通りです.
 
  
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) {
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
}