[javascript] Uncaught TypeError : undefined는 jquery-min.js를로드 할 때 함수가 아닙니다.

약 5 개의 CSS 파일과 10 개의 Javascript 파일을로드해야하는 일반 웹 페이지를 만들고 있습니다.

  • HTML 페이지에서 별도로로드하면 내 웹 페이지가 제대로로드됩니다.
  • 이제 프로덕션을 위해 필요한 순서대로 모든 자바 스크립트를 단일 파일에 연결하고 모든 CSS를 다른 파일에 연결했습니다. 그러나 연결된 파일로 웹 페이지를 실행하려고하면 다음과 같은 오류가 발생합니다.

    Uncaught TypeError: undefined is not a function

연결된 Javascript 파일에서 jquery.min.js가로드되는 줄.

이 문제를 완화하려면 어떻게해야합니까? 모든 파일을 연결하고 프로덕션을 위해 축소하고 싶습니다. 도와주세요.

편집 : Javascript와 CSS를 개별적으로로드되고 정상적으로 작동했을 때 순서대로 병합했습니다.



답변

이 문제가 여전히 해결되지 않았다고 가정하면 많은 개별 파일이 세미콜론으로 코드를 끝내지 않습니다. 대부분의 jQuery를 스크립트로 끝나는 (jQuery)당신은 있어야합니다 (jQuery);.

별도의 파일로 스크립트는 잘로드되지만 하나의 개별 파일로 세미콜론이 필요합니다.


답변

파일을 병합하는 순서를 다시 확인해야 할 수 있습니다. 다음과 같은 형식이어야합니다.

  1. jquery.min.js
  2. jquery-ui.js
  3. 로드하는 타사 플러그인
  4. 사용자 정의 JS

답변

이 솔루션은 저에게 효과적이었습니다.

    ; (함수 ($) {
        // 코드
    }) (jQuery);

클로저 내부로 코드를 이동하고 jQuery 대신 $ 사용

위의 솔루션을 /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma 에서 찾았습니다.

너무 많이 설교 한 후


답변

다른 버전의 jQuery에 대한 두 개의 참조를 갖는 것과 동일한 오류가 발생했습니다.

내 마스터 페이지에서 :

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

또한 페이지에서 :

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>


답변

최근에 Squishit을 사용하여 jQuery Validation 플러그인 에이 문제 가 발생하여 js 오류가 발생했습니다.

“정의되지 않은 것은 함수가 아닙니다.”

jquery.validate.min.js가 아닌 축소되지 않은 jquery.validate.js 파일에 대한 참조를 변경하여 수정했습니다 .

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

예를 들어 Squishit을 사용하여 추가로 압축 할 때 특정 파일의 축소 된 버전은 @Dustin이 제안한 것처럼 누락 된 세미콜론 등을 처리하지 못할 수 있으므로 어떤 파일을 사용할 수 있는지 실험해야 할 수 있습니다. 두 배로 압축하고 Squishit 또는 번들로 묶는 모든 것에 맡깁니다.


답변

여전히이 문제를 해결할 수없는 사람들을 위해 jQuery를 사용할 때 ‘this’를 ‘$ (this)’로 변경했습니다.

예 :

$('.icon').click(function() {
    this.fadeOut();
});

결정된:

$('.icon').click(function() {
    $(this).fadeOut();
});


답변

함수와 같은 이름으로 실수로 변수 이름을 지정했을 때 매우 동일한 문제가 발생했습니다.

그래서 이거:

isLive = isLive(data);

실패, OP의 언급 된 오류 메시지 생성.

이 문제를 수정하는 것은 위의 줄을 다음과 같이 변경하는 것만 큼 간단합니다.

isItALive = isLive(data);

이 상황에서 얼마나 도움이되는지 모르겠지만 비슷한 문제에 대한 해결책을 찾는 다른 사람들에게이 답변을 제공하기로 결정했습니다.