2014-10-05 3 views
0

항목과 함수가 동적으로 할당되는 jQuery로 메뉴를 구현했습니다. This code works. 나는이 옵션을 클릭하면 메뉴를 숨길 필요가 있기 때문에jQuery : 동적으로 할당 된 함수가 작동하지 않습니다.

는, 나는 here 같이

p.click(function(){ 
    menu.hide(); 
    funcs[i].f; 
}); 

p.click(funcs[i].f); 

을 변경하지만, 변수 i가 부족하기 때문에 나는 Uncaught TypeError: Cannot read property 'f' of undefined 수 범위. 이 코드를 수정하는 방법?

+0

'funcs'는 어디에 있습니까? –

답변

0

내가 좋을 것 :

for (var i = 0; i < len; i++) { 

    (function(i){$('<p />', { 
     'style' : 'cursor: pointer', 
     'text' : funcs[i].title, 
     'click' : function(){ 
      funcs[i].f(); 
      menu.hide(); 
     } 
    }).appendTo(menu)})(i); 
} 

JS Fiddle demo합니다.

위 변수는 i 변수를 내부 범위로 전달하고 약간 다른 (개인 취향에 따라) 접근 방식을 사용하여 <p> 요소를 만듭니다.

+0

감사합니다.이 방법은 내부 범위를 명확히 할 수 있습니까? – ps0604

+0

나는 진정으로 내가 할 수 있으면 좋겠지 만 솔직히 직접 이해하지는 못합니다. 나는 생각한다. 때때로, 그렇지만 나는 설명을하려고 노력한다. 그리고 나는 자기 모순적인 시도와 은유로 빠진다. 그래서, 제가 할 수있는 것은이 답변의 설명에 당신을 가리키는 것입니다 : http://stackoverflow.com/a/9054695/82548 그리고 유용한 정보가 부족한 것에 대해 사과드립니다. –

+0

"자바 스크립트에서 범위는 액세스 할 수있는 변수, 개체 및 함수 집합입니다. JavaScript에 함수 범위가 있습니다. 함수 내에서 범위가 변경됩니다." (W3school에서) David Thomas가 말하는 것은 함수 안에서'i'는 함수 밖에서'i'와 같지 않습니다 (즉,'i'는 코드의 첫 줄과 마지막 줄입니다), 따라서 그것의 "내부 범위". @DavidThomas의 코드에서 함수의 매개 변수가 다른 문자 (예 : j 또는 k 또는 'inner_i' ;-))로 명명되었는지 설명하는 것이 더 간단합니다. – laruiss

0

이 시도 :

 (function(idx) { 
      p.click(function(){ 
       menu.hide(); 
       funcs[idx].f(); 
      }); 
     })(i); 
+0

감사합니다,하지만 이것을 구현하는 방법이 확실하지 않습니다. – ps0604

관련 문제