Nie zdefiniowano za pomocą jQuery w WordPress

32

Wiem, że jQuery jest załadowany, ponieważ mogę wyłączyć $opcję „jQuery” i wszystko zachowuje się zgodnie z oczekiwaniami, ale będzie to niechlujny skrypt, jeśli nie będę mógł tego naprawić

Ten skrypt:

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

Powoduje błąd $ is not a function

Ten skrypt:

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

działa w porządku.

Łagodny Fuzz
źródło

Odpowiedzi:

42

Możesz owinąć javascript wewnątrz funkcji samo-wywołującej, a następnie przekazać jQueryjako argument, używając $jako nazwy zmiennej lokalnej. Na przykład:

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

powinien działać zgodnie z przeznaczeniem.

Jeśli dobrze pamiętam, dostarczona przez WP wersja jQuery (ta, którą dostajesz, jeśli ją posiadasz wp_enqueue_script('jquery')), natychmiast wprowadza konflikt w jQuery, powodując, że $jest niezdefiniowany.

nikt
źródło
rozumiem. Kiedyś dodawałem go ręcznie, co wyjaśnia, dlaczego nie spotkałem się z tym problemem.
Łagodny Fuzz,
Dziękuję, użyłem alternatywnego formatu z jQuery na początku zamiast końca .. ale nie mogłem wymyślić, jak zwrócić wartość, w tym formacie właśnie dodałem return przed funkcją samowywołania i działa.
eselk 15.01.2015
Bardzo przydatna odpowiedź.
MarkSkayff,
32

Jesteś prawie na miejscu!

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

});

Musisz przekazać odwołanie do jQuery jako $funkcji do metody, inaczej nie zadziała. Jeśli umieścisz $ wewnątrz pierwszego function()połączenia, tak jak ja powyżej, wszystko będzie działać dobrze.

EAMann
źródło
4
+1: To jest bardziej czytelne niż umieszczenie jQueryna końcu.
fuxia
1
... ale to nie jest standardowy sposób wykonywania anonimowej funkcji. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH
5
Tak i nie. Oba są uważane za „standardowe” sposoby na zrobienie tego. Jeden tworzy klasę singleton, która $zdefiniowała lokalnie. Drugi po prostu definiuje moduł obsługi readyzdarzenia dokumentu i przekazuje obiekt jQuery do modułu obsługi jako $. Jeśli próbujesz dołączyć do readywydarzenia, druga metoda jest szerzej stosowana. Jeśli potrzebujesz jQuery w jakimkolwiek innym celu (na $.browserprzykład w celu podłączenia się ), możesz użyć klasy singleton.
EAMann
+1 za jQuery (dokument) .ready (funkcja ($) {... więcej informacji o jquery i WordPress można również przeczytać na moim poście: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge
6

Przekazywanie funkcji do jQuery jest $(document).ready(...)zatem krótsze, $dlatego umieszczając jako pierwszy parametr Twojego wywołania zwrotnego, tworzysz alias dla jQuery w ramach tego wywołania zwrotnego:

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

Dokumentację tego możesz zobaczyć tutaj .

Rohmann
źródło