예를 들어 다음 호출 메서드는 사용할 수 없습니다. element.onclick = test(arg1, arg2); only element.onclick = function(){ ... }; 다른 방식으로 구현되므로 매개변수를 함수에 전달할 수 없습니다. 수많은 온라인 정보를 참고하여 이 문제를 해결하는 방법은 코드를 예로 들면 다음과 같습니다.
function Handler() { };
Handler.prototype = {
/*
* eventType 이벤트를 요소에 바인딩합니다. 처리
* IE, Firefox 등의 브라우저와 호환
*
* @param 요소 이벤트가 등록된 객체(Object)
* @param eventType The 등록된 이벤트 유형(문자열), no "on" 추가
* @param handler 이벤트 핸들러(함수)
*/
registerEvent: function(element, eventType, handler) {
if(element. attachmentEvent) { //레벨 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은 창 개체를 나타냅니다.
* @param func 바인딩이 필요한 이벤트 처리 함수의 이름 to bebound
* @param ... 세 번째 매개변수 시작은 바인딩 이벤트 핸들러 함수의 매개변수로, 0에서 그 이상으로 구성됩니다.
*/
bind: function(obj, handler) {
obj = obj || window;
var args = [ ];
for(var i =2; i < 인수.길이; 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 이벤트 속성 메서드
}