문제

다른로드로 작업하려고합니다 JavaScript 내 페이지에서는 말을 할 수 없습니다.

<html>
<script type="text/javascript" src="jquery144.js"></script>
<script type="text/javascript" src="shared_functions.js"></script>
<script type="text/javascript" src="page_function_callers.js"></script>
</html>


// shared_functions.js
$(document).ready (function () {
    function sayHello (what) {
        alert (what);
    }
});

// page_function_callers.js
$(document).ready (function () {
    $("div.my_button").click (function () {
        sayHello ("Hello world!");
    });
});

나는 jQuery와 함께 일하며 많은 공개 방법을 되풀이해야하기 때문에 이런 식으로 사용하고 싶습니다. 내가 어디에서 틀렸어?

도움이 되었습니까?

해결책

"Sayhello"를 선언 할 때 (누구든지 샬럿 교회의 노래? Gosh, The Memories ...) "준비된"기능 내에서 그것은 그 기능의 로컬입니다. 이것을 좋아한다면 글로벌로 만들 수 있습니다.

window['sayHello'] = function sayHello(what) {
  alert(what);
};

( "function"키워드의 이름 인 "로컬"이름을 제공하는 것이 좋습니다.이 기능은 Firebug에서 "익명"으로 표시되지 않기 때문입니다.)

"창"대신 jQuery 객체에 올려 놓으면 전역 기능을 jQuery 플러그인 또는 적어도 jQuery "Global"으로 조사하는 것이 좋습니다.

다른 팁

함수 sayHello SCPOE 내부에서 선언됩니다 DOMReady 이벤트 ( $(document).ready ). 그 범위 외부에서는 사용할 수 없습니다. 그러나 아무도 없습니다 필요 해당 범위 내부에서 함수를 선언합니다. 설사 sayHello 많은 DOM 객체를 사용합니다 (예에서는 그렇지 않은 경우), 호출 될 때까지 실행되지 않으므로 그러한 함수가 아닌지 확인 해야하는 유일한 것은 ~라고 불리는 DOMREADY 이후까지.

따라서 shared_functions.js에서 첫 번째와 마지막 줄을 간단히 제거 할 수 있습니다. $(document).ready(function() { 그리고 }); 각각 코드가 작동합니다.

함수를 정의하십시오 sayHello 전화 외에 $(document).ready.

위의 코드에서 SayHello () 메소드는 익명 함수의 범위 내에서만 정의됩니다.

이 코드는 다음과 같이 더 잘 작동 할 수 있습니다.

// shared_functions.js
window.MyNamespace = window.MyNamespace || {};
MyNamespace.sayHello = function(what)
{
  alert(what);    
};

// page_function_callers.js
$(document).ready (function ()
{
    $("div.my_button").click (function ()
    {
      MyNamespace.sayHello('hello world');    
    });
});

JS 파일을 올바른 순서로로드하고 있는지 확인하십시오. 더 우아한 솔루션이 있지만 이것은 상당히 간단하고 간단한 솔루션입니다.

이 접근법의 한 가지 장점은 글로벌 네임 스페이스를 오염시키는 것이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top