WordPress에서 jQuery를 사용하여 정의되지 않은 $


32

나는 $'jQuery'를 전환 할 수 있고 모든 것이 예상대로 작동 하기 때문에 jQuery 가로 드된다는 것을 알고 있지만이 문제를 해결할 수 없으면 지저분한 스크립트가됩니다

이 스크립트는 :

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

오류를 일으킨다 $ is not a function

이 스크립트는 :

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

잘 작동합니다.

답변:


42

Javascript를 자체 호출 함수로 랩핑 한 다음 로컬 변수 이름으로 jQuery사용하여 인수로 전달할 수 $있습니다. 예를 들면 다음과 같습니다.

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

의도 한대로 작동해야합니다.

WP가 제공하는 jQuery 버전 인 jQuery (귀하의 경우 얻을 수있는 버전)를 올바르게 기억하면 wp_enqueue_script('jquery')jQuery가 충돌없이 즉시 발생 $하여 정의되지 않은 상태가됩니다.


아아 나는 이것을 직접 손으로 추가했는데 왜이 문제를 겪지 않았는지 설명합니다.
Mild Fuzz

고맙습니다. 처음에 jQuery와 함께 대체 형식을 사용하지 않고 시작했습니다 .. 그러나 값을 반환하는 방법을 알 수 없었습니다.이 형식으로 방금 자체 호출 함수 앞에 return을 추가하여 작동합니다.
eselk

매우 유용한 답변입니다.
MarkSkayff

32

거의 다 왔습니다!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

$메소드에 함수로 jQuery에 대한 참조를 전달해야합니다 . 그렇지 않으면 작동하지 않습니다. function()위에서 한 것처럼 첫 번째 통화 안에 $를 넣으면 문제가 해결됩니다.


4
+1 : jQuery마지막에 두는 것보다 읽기 쉽습니다 .
fuxia

1
익명의 기능을 수행하는 표준 방법은 아닙니다. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH

5
예, 아니오 둘 다 "표준"방식으로 간주합니다. 하나는 $로컬로 정의 된 싱글 톤 클래스를 만듭니다 . 다른 하나는 문서 ready이벤트 의 핸들러를 정의 하고 jQuery 객체를 핸들러로 전달합니다 $. ready이벤트 에 연결하려는 경우 두 번째 방법이 더 널리 사용됩니다. 다른 목적으로 jQuery가 필요한 경우 ( $.browser예 : 연결) 싱글 톤 클래스를 사용합니다.
EAMann

jQuery (document) .ready (function ($) {...에 대한 +1 jquery 및 WordPress에 대한 mor 정보도 내 게시물 wpengineer.com/2028/small-tips-using-wordpress-and-jquery 에서 읽을 수 있습니다 .
bueltge

6

jQuery를에 함수를 전달하면 속기입니다 $(document).ready(...)배치하여 다음 $, 그 콜백 내에서 jQuery를위한 별칭을 만들 콜백의 첫 번째 매개 변수로 :

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

이에 대한 설명서는 여기 를 참조 하십시오 .

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