2012-05-26 11 views
0

Phonegap 및 JQueryMobile을 사용하여 웹 응용 프로그램을 만듭니다. 나는 자바 스크립트에 익숙하지 않고 문제가 있습니다.함수 내에서 외부 함수 호출 - 자바 스크립트

내 문제는 "testscript.js"라는 파일에있는 함수를 호출하는 것입니다.이 함수의 이름은 testFunc입니다. testscript.js의 containts에만이 :

내 HTML 페이지 내에서
function testFunc() { 
    console.log("Yes I work"); 
} 

나는 다음과 같은 코드가 있습니다

<script> 
    $('#pageListener').live('pageinit', function(event) 
    { 
    testFunc(); 
    }); 
</script> 

테스트 기능이 나는이 함께 포함하고 내 "testscript.js"내에서 발견된다 헤드 내에서 줄 :

<script src="testscript.js"></script> 

내가 얻는 오류는 "testFunc가 정의되지 않았습니다"입니다.

alert("I work"); 

과 나는 HTML에 스크립트 태그 내에서를 고집하여 내 함수를 호출 할 수 있어요 : 나는 같은 다른 JQuery와 함수를 호출 할 수 있어요로

나는 그에게 범위 문제의 몇 가지 유형을 가정하고 다른 곳에서.

필자의 모든 기능을 성공적으로 호출하는 방법을 시도해 봤지만, 어떤 도움을 주셔서 감사합니다!

+0

'testscript.js'는 어떻게 생겼습니까? 특히 'testFunc'를 정의하는 비트는 무엇입니까? –

+0

testscript.js 파일과 testFunc의 모습을 보여주기 위해 제 질문을 업데이트했습니다. – Demonofloom

답변

1

당신은 당신의 HTML의 다른 jQuery 코드 전에 testscript.js를 포함해야합니다. 이렇게 :

<script src="testscript.js"></script> 

<script> 
    $('#pageListener').live('pageinit', function(event) 
    { 
     testFunc(); 
    }); 
</script> 
+0

고마워요! 그건 내 문제를 해결했다. 그러나 나는 내가 왜 내가 사용하고있는 다른 자바 스크립트 라이브러리 (Jquery, jquery-mobile 등)와 함께 head 태그 사이에 포함되어있을 때 그것을 포함해야하는지 명확하지 않다.설명 할 수 있니? – Demonofloom

+0

@Demonofloom : 내가 말했듯이, PhoneGap이'pageinit' 핸들러를 호출 할 때'testscript.js'가로드되어있는 한 작동 할 것입니다. 'testscript.js' include를 옮겼을 때 작동하기 시작했다면, PhoneGap이 핸들러를 실행했을 때로드되지 않았 음을 의미합니다. 예를 들어, 스크립트 링크가 페이지에서 너무 멀리 떨어져 있습니다. –

+0

예. T.J. 올바르게 언급했다. 이 함수가 호출되었을 때 스크립트가로드되지 않았을뿐입니다. – gopi1410

1

는만큼 testscript.js로 폰갭은 pageinit 이벤트를 발생 시간에 의해로드, 작동하지해야 할 이유가 없다는 testFunc 함수는 전역 제공되었습니다.

당신은 우리에게 당신의 testFunc를 표시하지 않은,하지만 내 생각은 글로벌 아니라고, 오히려 당신은 예를 들어, 같은 안에 그것을 가지고 :

$('#pageListener').live('pageinit', function(event) 
{ 
    function testFunc() 
    { 
     // Do something here 
    } 
}); 

하거나 범위 지정 기능

(function() 
{ 
    function testFunc() 
    { 
     // Do something here 
    } 
})(); 

어느 쪽이든 다른 함수 내에서 선언되었으므로 전역이 아닌 해당 함수에 로컬입니다. 다른 스크립트 파일에서 호출하려면 전역 네임 스페이스에서 가져올 수 있어야합니다 (슬프게도). 그렇게 할 수있는 가장 좋은 방법은 없습니다이 글로벌하게,하지만 이런 식으로, 당신은 당신의 공유 물건을 모두 넣을거야 단지 글로벌 만들 입니다 :

(function() 
{ 
    if (!window.MyStuff) 
    { 
     window.MyStuff = {}; 
    } 
    window.MyStuff.testFunc = testFunc; 

    function testFunc() 
    { 
     // Do something here 
    } 
})(); 

...하는 이 같은 전화 :

$('#pageListener').live('pageinit', function(event) 
{ 
    MyStuff.testFunc(); // Or: window.MyStuff.testFunc(); 
}); 
+0

내 testFunc가 글로벌이라고 생각합니다. 나는 원래의 질문을 편집하여 testscript.js가 어떻게 보이는지 보여줍니다. – Demonofloom

관련 문제