2011-01-22 4 views
0

나는 아주 기본적인 jquery 질문을 가지고있다. 내 사이트에 jscrollpane을 추가하고 Ajax 호출 후 초기화하도록 시도하는 중입니다. 그러나 내가 함수를 실행하면 콘솔에 "testFunction is not defined"메시지가 계속 나타납니다. 코드는 매우 기본적인 것입니다 :jQuery 이해하기 (기본 질문)

$(document).ready(function() { 
    var api = $('.scroll-pane').jScrollPane({ 
     showArrows:true, 
     maintainPosition: false 
    }).data('jsp'); 

    function testFunction() { 
     api.getContentPane().load('ajax_content.html', function() { 
     api.reinitialise(); 
    }); 
}   
}); 

왜 메시지가 계속 나옵니까? 내가 문서 준비 함수 밖으로 testfunction 걸릴 경우 미리 "덕분에 정의되지 않은"오류가 발생합니다.

답변

5

이것은 사용자가 정의하는 변수 api의 범위와 관련이 있습니다. api 변수를 $(document).ready(function() { ... 외부에 정의해야합니다. 사용해보기 :

var api; 
$(document).ready(function() { 
    api = $('.scroll-pane').jScrollPane({ 
     showArrows:true, 
     maintainPosition: false 
    }).data('jsp'); 
}); 

function testFunction() { 
    api.getContentPane().load('ajax_content.html', function() { 
     api.reinitialise(); 
    }); 
} 

잘하면 도움이됩니다.

+0

감사합니다. – robs

1

'정의되지 않음'메시지는 testFunction을 사용하지만 정의 될 때까지 대기하지 않는 코드에서 발생합니다. testFunction의 정의를 documentReady 이벤트에 동봉했지만 testFunction의 사용자는 포함하지 않았습니다.

2

필자는 테스트 기능의 범위가 이제는 준비된 문서에서 호출하는 익명 함수이기 때문이라고 생각합니다. 그 익명 함수 밖에서 testFunction을 선언하십시오.