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


104

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

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

    Uncaught TypeError: undefined is not a function

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

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


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


5
undefined표시 할 코드가없는 경우 어떻게 알 수 있습니까?
Joseph

정의되지 않은 것은 im로드하는 jquery-1.6.1.min.js에 있습니다. 어쩌면 jquery가 제대로로드되지 않았습니까?
ghostCoder

아마도 높은 순위의 대답을 받아들이겠습니까?
Allisone 2013 년

답변:


179

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

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


18
+1. JavaScript 코드를 연결할 때는 항상 세미콜론으로 연결해야합니다. 너무 많은 것들이 여전히 유효하지만 오류로 이어지지는 않습니다.
Bergi

9
디버깅하기가 엄청나게 까다 롭습니다. 정말 효과적인 답변에 감사드립니다!
ghayes

5
Bootstrap의 js는 분명히 그러한 예 중 하나입니다. 감사합니다! 그것은 진짜 국수 긁는 사람이었습니다.
Kevin Beal

YouTube iframe API를 가져 오려고하는데 세미콜론으로 끝나지 않고이 오류가 발생합니다. 나는 그것을 무엇과도 연결하지 않고있다. 나는 그것을 jQuery.getScript ()로로드하고있다. 그래서 ...이게 내 오류의 원인일까요? 아니면 말이되지 않나요?
다니엘

1
라이브러리로 작업하는 동안이 오류가 표시되면이 문제를 어떻게 해결합니까? 나는 2.3.2 / JS / bootstrap.min.js를 사용하려고하고 /1.4.6/bootstrap-editable/js/bootstrap-editable.min.js하고
codeObserver

28

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

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

이것과 마찬가지로 json2.js, jquery-1.6.1.min.js, jquery 플러그인, 내 코드. 이 순서대로.
ghostCoder

json2.js가 jquery 함수를 사용하는 경우 jquery.min.js가 먼저 있어야합니다. 내가 제안 할게. jquery.min.js, jqueryPlugins, json2.js, 내 코드.
Bilal Murtaza


16

다른 버전의 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>

7

최근에 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 또는 번들로 묶는 모든 것에 맡깁니다.


축소되지 않은 버전을 사용하는 것은 나에게 딱 맞는 티켓이었습니다. 감사합니다.
Paul Deen

나를 위해 문제를 일으키는 NuGet 패키지 버전 1.0.2의 json2.min.js 파일이었습니다. 나는 그것을 min이 아닌 파일로 전환했고 Squishit 결합 파일은 이제 잘 작동합니다.
billoreid 2013 년

6

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

예 :

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

결정된:

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

5

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

그래서 이거:

isLive = isLive(data);

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

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

isItALive = isLive(data);

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


5

예, js 라이브러리에서 축소되지 않은 것으로 변경하는 것도 수정했습니다.

예를 들어 태그에서 다음을 변경합니다.

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

에 대한:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

축소되지 않은 상태로 'min'을 종료합니다.

아이디어 주셔서 감사합니다.


3

기억하세요 : 자바 스크립트 함수는 대소 문자를 구분합니다.

내 코드가 원활하게 실행될 것이라고 확신하는 경우가있었습니다. 그러나 여전히 오류가 발생하여 Chrome 의 Javascript 콘솔 을 확인하여 그것이 무엇인지 확인했습니다.

내 오류 라인은

opt.SetAttribute("value",values[a]);

그리고 동일한 오류 메시지가 나타납니다.

Uncaught TypeError: undefined is not a function

위의 코드에 문제가없는 것 같지만 실행 중이 아닙니다. 거의 한 시간 동안 문제를 해결 한 다음 실행중인 다른 코드와 비교했습니다. 내 오류는로 설정되어 SetAttribute있다는 것 setAttribute입니다.


2

저처럼 바보가있을 경우에 저는 간단한 것을 잊었 기 때문에이 답답한 문제가있었습니다.

new

새 개체를 인스턴스화하기 전에 키워드.


1

방금 IcedCoffeeScript에서 다음 코드로 동일한 메시지를 받았습니다.

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

이것은 일반 ICS 코드처럼 보였습니다. 나는 await-defer 구조를 일반 CoffeeScript로 펼쳤습니다.

f (err,res) ->
  console.log err if err

실제로 일어난 일은 2 f개의 매개 변수를 예상 하는 함수에 1 개의 콜백 함수 (2 개의 매개 변수 포함)를 전달하려고 시도한 것입니다 . 효과적으로 cb내부 설정이 아닌 f컴파일러가 undefined is not a function.

내가 맹목적으로 콜백 스타일의 상용구 코드를 붙여 넣었 기 때문에 실수가 발생했습니다. 매개 변수를 전달할 f필요가 err없으므로 다음과 같아야합니다.

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

일반적인 경우에는 일치하는 arities에 대한 함수 서명과 호출을 다시 확인하는 것이 좋습니다. 오류 메시지의 호출 스택은 유용한 힌트를 제공 할 수 있어야합니다.

특별한 경우에는 병합 된 파일에서 다른 서명이나 함수를 보유하는 전역 변수에 대한 할당과 함께 두 번 나타나는 함수 정의를 찾는 것이 좋습니다.


1

주석을 달았는지 확인하십시오. 복사하여 붙여 넣을 때 "/ *!"를 생략하는 경우가 있습니다.

또한 콘솔로 이동하면 오류 목록이 표시되며 한 번에 하나씩 가져와야합니다. "Uncaught SyntaxError : Unexpected token *"이 표시되면 js 파일을 읽고 있으며 첫 번째 줄을 지나지 않는다는 의미 일 수 있습니다.

/ *! * jquery.tools 1.1.2-웹용 누락 된 UI 라이브러리 * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * 생성 된 파일 : Wed Oct 07 09:40:16 GMT 2009 * /


0

하나의 콜백 매개 변수 만 예상하는 jquery 함수에 실수로 너무 많은 매개 변수를 전달했을 때이 문제가 발생했습니다.

기타 문제 해결 : 추가 매개 변수에 대한 모든 jquery 함수 호출을 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.