>웹 프론트엔드 >JS 튜토리얼 >JavaScript 등록에서 매개변수 전달 실패 문제에 대해 event_javascript 기술을 클릭하세요.

JavaScript 등록에서 매개변수 전달 실패 문제에 대해 event_javascript 기술을 클릭하세요.

WBOY
WBOY원래의
2016-05-16 16:41:391093검색

지난 6개월 동안 저는 Java 프로그래머로서 Java 코드보다 JavaScript 코드를 더 많이 작성했습니다. 얼마 전에는 은행 창구 인증 기능에서 창구 제어 시스템을 구축하고 있었습니다. 조직권한, 창구형권한, 직위권한, 영업권한 등 다양한 요소를 고려할 때 이러한 권한은 여러 번 교차되거나 결합되어야 하며, 페이지에서 많은 JavaScript를 사용하여 제어해야 합니다. 이로 인해 JavaScript 코드가 Java 코드보다 이 기능 모듈의 구현을 더 담당하게 되는 상황이 발생했습니다.

이제 은행용 대여금고 관리 시스템을 개발해야 합니다. C/S만큼 직관적이고 편리한 관리 기능을 구현하기 위해서는 대여금고 관리와 대여금고 관리가 핵심 기능입니다. 며칠간의 고민과 실험 끝에 마침내 CSS javaScript java를 사용하여 비즈니스 로직을 처리하고 CSS를 사용하여 대상 개체의 다양한 상태를 표현합니다. CSS 전환을 달성하기 위해 대상 개체의 상태를 기반으로 하는 javaScript입니다.

여기서 문제가 발생했습니다. 즉, JavaScript에서 html 요소에 대한 클릭 이벤트 핸들러 함수를 등록할 때(예: 핸들러 함수에 3개의 매개변수 전달) 문제가 발생했습니다. 다만, 다음 방법(node는 이벤트를 등록하는 노드, fun은 이벤트 처리 함수)을 사용해도 이벤트 처리 함수에 매개변수를 전달할 수 없습니다.

node.addEventListener('click', fun, false); 
node.attachevent('onclick', fun);
Node['onclick']=fun

분명히 어떤 방법도 작동하지 않습니다. 작성이 올바르지 않다는 점에 유의하세요.

node.addEventListener('click', fun(arg1,arg2,arg3), false); 
node.attachevent('onclick', fun(arg1,arg2,arg3)); 
Node['onclick']=fun(arg1,arg2,arg3)

다행히 "JavaScript.DOM Advanced 프로그래밍"이라는 책을 읽다가 이 책에서 해결책을 찾았습니다. 먼저 메소드를 작성하세요:

function bindFunction(obj, func){ 
var args = []; 
for(var i =2; i < arguments.length; i++) { 
args.push(arguments[i]);
} 
return function(){ 
func.apply(obj, args);
}; 
};

그런 다음 자신의 js 라이브러리에 다음 두 가지 메서드를 추가하세요. 이해가 안 되는 부분이 있으면 책의 섹션 2.3에 이 메서드에 대한 지침이 있지만 제가 추가했습니다. 몇 가지 변경 사항:

function bindFunction(obj, func){ 
var args = []; 
for(var i =2; i < arguments.length; i++) {
args.push(arguments[i]);
}
return function(){
func.apply(obj, args);
};
}; 
window['OYF_MARK']['bindFunction'] = bindFunction; 
function addEvent(node, type, listener){
//使用前面的方法检查兼容性以保证平稳退化
if (!isCompatible()) {
return false
} 
if (!(node = $(node))) 
return false;
if (node.addEventListener) { 
//W3C的方法(冒泡事件,如果将false改为true,则为捕获事件) 
node.addEventListener(type, listener, false); 
return true;
}
else
if (node.attachEvent) { 
//MSIE的方法 
node['e' + type + listener] = listener;
node[type + listener] = function(){
node['e' + type + listener](window.event);
} 
node.attachEvent('on' + type, node[type + listener]); 
return true; 
}
//若两种方法都不具备则返回false 
return false;
};
window['OYF_MARK']['addEvent'] = addEvent;

위의 두 함수는 "JavaScript.DOM 고급 프로그래밍"의 소스 코드를 기반으로 제가 약간 수정한 후 재사용을 위해 제 js 라이브러리 중 하나에 추가했습니다. 다음으로, 다음 방법을 사용하여 요소에 대한 이벤트를 등록하고 매개변수를 이벤트 처리 함수에 전달할 수 있습니다.

//注册新的onclick事件处理函数
OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.