2014-02-09 7 views
1

저는 Wordpress 기반 웹 사이트에서 jquery에서 "tabcordion"라이브러리를 사용하려고합니다. tabcordion 자바 스크립트 파일은 '대기열에 포함'되고 jquery 파일 다음에 표시됩니다 (비트가 괜찮아 보입니다).

JQuery와 코드의 시작은 다음과 같습니다

(function($) { 
var Tabcordion; 

$.fn.tabcordion = function(option) { 
    return this.each(function() { 
    var $this, data, options; 
    $this = $(this); 
    // rest of code .... 

내 페이지를로드 할 때 나는 오류 "형식 오류 : $이 정의되지"나는 모든 변경 인터넷 검색을 조금 후

방화범

에 $. jQuery로. 나는 JQuery와 정의 $이없는 있으리라 믿고있어

$this = $(this); 

: 몇 가지 문제를 정렬

밖으로하지만, 행에 대한 오류가 발생합니다.

$ = jQuery; 

을하지만 작동하지 않았다 : 나는 함수의 상단에 줄을 추가했습니다.

어떤 아이디어로 어떻게 $ 행동을 취할 수 있습니까?

그 작동 다른 스크립트에 의해 묶여있다 :

(function($){ jQuery(document).ready(function($){ 
    // code in here 
}); })(jQuery); 

그러나 tabcordion의 끝이 있습니다은 "호출 (이)"비트가 저를 던지고있다

(function($) { 
    // tabcordion code.... 
}).call(this); 

그리고?

아이디어가 있으십니까?

+0

$를 jQuery로 변경하면 jquery를 이미로드 한 경우 작동합니다. –

+0

@AmitGarg : 문제가있는 곳의 OP 코드가 아닙니다. 그것은 tabcordian입니다. –

답변

6

jQuery에 대해 $을 jQuery에 포함 시키려면 아무 것도하지 않아도됩니다. 정의는 jQuery 스크립트의 일부입니다.

이 오류는 세 가지 중 하나를 알려줍니다. 다음 중 하나를

  1. 당신은 이전에 (예를 들어, 404을 실패 할 수 또는 시도), 또는

  2. 당신은 jQuery를로드 한 후 다른 뭔가를로드하는 플러그인을 포함하여 jQuery를 포함하지 않은 $ 기호 인수되거나

  3. 당신은 $ 기호를 출시 jQuery.noConflict()를 호출하고 있습니다.

이 일을하는 데, 나는 그것이 # 1 말하고 싶지만 아닌 $ = jQuery; 시도 기준으로합니다. 따라서 스크립트 태그가 올바른 위치에 있는지 확인하고 404 오류 (또는 유사한 오류)가 발생하지 않도록하십시오. 귀하의 코멘트 후


업데이트 :

I'm using a plugin called "use google libraries". That is calling jQuery.noConflict() after it has run.

우선, 워드 프레스는 플러그인을 호출 noConflict 나에게 좋은 생각처럼 보인다.마찬가지로, tabcordian은 $ 기호에 전혀 의존해서는 안됩니다. 사람들은 noConflict을 사용할 수 있기 때문에 jQuery 플러그인은 $에 의존해서는 안됩니다! 그러나 tabcordian 소스를 간략하게 살펴보면 정확히 다음과 같이 나타납니다. $에 의존합니다.

나는 tabcordian을 포크로 찍어서 수정하는 것이 좋습니다. 일반적인 방법 당신은 플러그인에 다음과 같이 (function($){로 열고 })(jQuery);로 끝나는 것입니다 그렇게 :

(function($) { 
    // plugin code here, can use $ because it refers to our argument, 
    // not the global symbol that may not be there 
})(jQuery); 
을 혼동 .call(this)

다시의 tabcordian의 사용 : 당신이 경우 완전히 무의미

(function() { 
    // ...tabcordian source... 
}).call(this); 

함수 내에서 엄격한 모드를 사용하지 않습니다. tabcordian은 그렇지 않습니다. ( 인 경우 엄격 모드 사용은 this이 기능 내 전역 개체를 계속 참조하도록 만드는 방법입니다.) 그러나 CoffeeScript에서 해당 소스가 생성되므로 이는 상용구 CoffeeScript의 내용 일 수 있으며이를 지원하기 위해 엄격한 모드.

+0

"google libraries 사용"이라는 플러그인을 사용하고 있습니다. 그것이 실행 된 후 jQuery.noConflict()가 호출됩니다. 이 방법을 '실행 취소'하여 jQuery로 $를 재정의 할 수 있습니까? 어떤 업데이트로 문제가 다시 발생하기 때문에 플러그인을 편집하지 않을 것입니다. 고맙습니다. –

+0

@ 존 : 나는 원래의 질문 끝에'.call (this)'에 대한 여러분의 의견과 질문에 답하기 위해 답변을 업데이트했습니다. –

+2

@TJ - 훌륭한 답장을 보내 주셔서 감사합니다. 나는 지금 그것을 일하게 할 수 있었다. 당신이 제공 한 설명은 큰 도움이되었습니다. 나는 Github에 익숙하지 않아서 무언가를 포크에 넣으 려하지 않습니다. 나는 아마 그것을 포크로 막는 것을 끝낼 것이다 ;-) 그래서 나는 더 많은 경험을 가진 누군가에게 그것을 맡길 것이다. 다시 한번 감사합니다. –

관련 문제