2012-12-22 2 views
4

이 내 HTML 페이지입니다 :메인 페이지에서 별도의 .js 파일로 jquery 함수를 호출합니다.

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 

<script type="text/javascript" src="jquery-1.8.2.min.js"></script> 

<script type="text/javascript" src="myscript.js"></script> 

<script type="text/javascript"> 

$(document).ready(function() { 
function closecontactform(){ 
alert("closing the form"); 
}; 
}); 
</script> 
</head> 
<body> 
<p id="elementname">Click me to call function</p> 
</body> 

이것은 myscripts.js 파일에 있습니다

$(document).ready(function() { 
$('#elementname').click(function() { 
alert("click detected"); 
closecontactform(); 
}); 
}); 

내 실제 페이지에

이 아주 조금 더 복잡 이것보다하고 JQuery와 많이 포함하지만이 필요한 코드 만 보여주는 기본 문제입니다. 함수가 메인 페이지에 정의되어있는 반면 별도의 .js 파일에서 함수를 호출 할 수 있기를 원합니다. 이 간단한 간단한 버전에서는 $ (document) .ready (function() ...)을 제거해 보았습니다.이 간단한 예제에서는 제거하는 것이 더 복잡한 페이지에서 해당 줄을 필요로하는데, 그 이유는 제거하는 것이 내가 가지고있는 모든 것을 망가 뜨리는 것 같습니다. 에.

당신은 볼 수

호출됩니다 "감지 클릭"하지만,하지 않습니다 "양식을 닫는."

나에게 어떤 포인터를 줄 당신은 수 있습니까?

감사합니다,

답변

13

범위 문제가 있습니다. $(document).ready()에 명명 된 함수를 래핑 할 필요가 없습니다.

ready에 랩핑 된 경우 해당 범위는 기능 내에서 종료로 인해 해당 준비된 기능에서만 사용할 수 있습니다.

예 : 기능은 전 세계적으로 사용할 수 있고 어디에서 호출하면 작동 할 수 있도록

$(document).ready(function() { 
    function doAlert() { 
     alert('foo'); 
    } 
    /* can call function since scope in same parent function*/ 
    doAlert(); 
}); 
/* function not in scope, is undefined here*/ 
doAlert(); 

팩터. 아래의 두 경우 모두에서 작동합니다 :

function doAlert() { 
    alert('foo'); 
} 

$(document).ready(function() { 
    doAlert(); 
}); 
doAlert(); 

또한 참고 :

많은 사람들의 jQuery 셀렉터 및 방법을 사용하여 기능은 $(document).ready()에 싸여되어야 함을 우려하고있다. ready 외부의 명명 된 함수는 모든 jQuery 코드를 포함 할 수 있지만 ... DOM이 html이 존재할 준비가 된 후에 호출해야합니다.

+0

확인. 당신이 말한 것처럼 범위 문제였습니다. 그러나 제 실제 함수가 실제로 많은 변수와 jquery (및 CSS)를 포함하고 있기 때문에 제 $ (document) .ready()를 제거 할 수 있다고 생각하지 않습니다. html로드 중입니다. 그래서 내가 한 것은 모든 코드를 분리 된 .js 파일에서 가져 와서 내 메인 페이지의 동일한 $ (document) .ready() 안에 넣는 것입니다. 문제가 해결되었습니다. – Maureen

+0

ok .. jQuery 코드 부분을 설명하려고 시도했지만 아마도 함수를 꺼낼 수 있습니다.당신은 여전히'ready' 내에서만 많은 함수를 호출 할 수 있습니다. 그러나 동일한 전역 함수에 접근 할 때 diffeent 파일에'ready'를 가질 수 있습니다. – charlietfl

+0

'ready'의 이름을 가진 함수를 호출 할 때 $ (document) .ready를 래핑하는 방법을보십시오. . 함수가 호출 될 때까지 함수가 실행되지 않습니다. 여기에 정의 된 위치 (상단 또는 하단)에 – charlietfl

0

시도해 보셨습니까

<script type="text/javascript" src="myscript.js"></script> 

<body> 태그 아래?

0

먼저, 스크립트 태그를 </body> 바로 위로 이동해야합니다. 꼬리표.

둘째로 준비가 완료된 문서를 제거하면 위의 작업을 수행해야합니다. 문제는 클로저 의미 안에서 함수를 정의했다는 것입니다. 범위를 벗어났습니다. 이 기능은 다른 문서 준비가 시작될 때 (즉, 문서가 준비되었음을 나타냄)에만 시작될 수 있기 때문에 준비된 문서에있을 필요는 없습니다.

+0

스크립트가 범위 문제에 영향을 미치지 않습니다. 여기서는 문제와 관련이 없습니다. – charlietfl

관련 문제