2013-12-13 3 views
0
while (infoRepNames.length > 0) { 
    infoRepName = infoRepNames.substr(0,8); 
    $('.' + infoRepName).on('click', DMRep002).css({'font-size': '1em', 'font-weight': 900}); 
    infoRepNames = infoRepNames.substr(9); 
} 

괜찮습니다. infoRepNames에서 DMRep999가 ";"로 구분 될 때까지 "DMRep001"중 0에서 n 개의 함수 이름을가집니다. 필자는 하나의 function-name을 꺼낼 때마다 infoRepNames에 "DMRep002"라는 이름이 하나만있을 때 위 코드가 작동하고 명령에서 "DMRep002"라는 이름을 그대로 사용합니다.변수로 이벤트 기능 제공

그러나 "infoRepName"에 의한 "DMRep002"에 대한 직접 호출을 대체 할 때 방화 광부로부터 메시지를받는 것보다 "Uncaught TypeError : Object DMRap002에 'apply'메소드가 없습니다."

는 명확하게하려면 : 나는

$('.' + infoRepName).on('click', infoRepName).css({'font-size': '1em', 'font-weight': 900}); 

에 선

$('.' + infoRepName).on('click', DMRap002).css({'font-size': '1em', 'font-weight': 900}); 

변경 기능은 다른 형태의 호출이다. 나는 현재 나의 상황에서 약 500 가지 형태를 가지고있다. 이 기능을 다른 양으로 동적으로 처리 할 수있는 방법이 있습니까?

+0

함수 참조가되어야하지만'infoRepName'은 문자열입니다. – PSL

답변

0

스토어 객체에 기능 :

var funcs = { 
    DMRep001 : function(){ ... }, 
    DMRep002 : function(){ ... }, 
    ... 
    DMRep999 : function(){ ... } 
}; 

은 당신이 그들을 호출 할 수 있습니다

$('.' + infoRepName).on('click', funcs[infoRepName]); 

나는 이러한 모든 다른 핸들러를 가진 몇 가지 안티 패턴 냄새하지만.

관련 문제