TypeError: „undefined” nie jest funkcją (ocena „$ (document)”)

139
  1. Używam witryny WordPress.
  2. Dołączam ten skrypt do nagłówka.

Po załadowaniu skryptu pojawia się ten błąd:

TypeError: „undefined” nie jest funkcją (ocena „$ (document)”)

Nie mam pojęcia, co to powoduje ani co to oznacza.

W Firebug otrzymuję to:

$ nie jest funkcją

dcolumbus
źródło
4
Upewnij się, że dołączasz bibliotekę jQuery przed swoim niestandardowym skryptem i że nie ma błędów na Netkarcie Firebug (upewnij się, że jQuery faktycznie zostało załadowane).
wsanville
... tak, oczywiście jQuery ładuje się wcześniej. Jestem prawie pewien, że jest to problem związany z WordPressem.
dcolumbus

Odpowiedzi:

239

Wordpress domyślnie używa jQuery w trybie noConflict . Musisz odwołać się do niego używając jQuerynazwy zmiennej, a nie $np. Use

jQuery(document);

zamiast

$(document);

Możesz łatwo zawinąć to w samowykonującą się funkcję, $aby ponownie odwołać się do jQuery (i uniknąć zanieczyszczania globalnej przestrzeni nazw), np.

(function ($) {
   $(document);
}(jQuery));
El Yobo
źródło
5
Skrypt nie jest konieczny; możesz po prostu zadzwonić, jQuery(document)a nie $(document)gdziekolwiek chcesz. Jeśli $zamiast tego chcesz użyć , powyższy skrypt po prostu tworzy funkcję, która pobiera argument, $a następnie wykonuje go przekazując jQuery; w skrócie, w ramach funkcji $wskazuje na jQuery, jak można się spodziewać.
El Yobo
2
Właściwie to umieściłem mój normalny $(document).ready(function() { // code });w miejscu twojego $(document);... które działało jak urok.
dcolumbus
1
Tak, to właśnie sugerowałem - „w funkcji $ wskazuje na jQuery, jak można się spodziewać”.
El Yobo
Cóż, w ten sposób oszczędza ci kilka znaków :) Więcej szczegółów o formie ! Function () {} () samowykonującej się instrukcji .
El Yobo,
Wiem, że to stare @ElYobo, ale myślę, że możesz edytować swój post i dodać przykład z pierwszego komentarza do odpowiedzi jako drugi przykład. Dziękuję za zaoszczędzenie czasu =)
Manatax
25

Użyj jQuery's noConflict. Zrobiło to dla mnie cuda

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

To znaczy, zakładając, że umieściłeś jQuery w swoim kodzie HTML

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
Leno Britto
źródło
15

Użyj tego:

var $ =jQuery.noConflict();
Suman Biswas
źródło
11

Wypróbuj ten fragment:

jQuery(function($) {
  // Your code.
})

U mnie zadziałało, może ci też pomoże.

Gurpreet Dhanoa
źródło
11

Miałem ten problem tylko na Chrome.

Próbowałem dodać

var $ =jQuery.noConflict();

tuż przed telefonem

$(document).ready(function () {

Zadziałało.

Wielkie dzięki

Le_Dhul
źródło
Dzięki za to. Wiedziałem, że mogę rozwiązać ten problem za pomocą „jQuery” zamiast „$”, ale moim problemem było to, że po napisaniu w ten sposób uruchamia się edycja Komodo, więc musiałem wybrać między otrzymywaniem podpowiedzi / uzupełniania kodu na $ lub faktycznym działaniem mojego JavaScript. Ta metoda pozwoliła mi mieć jedno i drugie.
George Kendros
6

Sprawdź również, czy uwzględniono jQuery, a następnie niektóre komponenty / inne biblioteki (takie jak jQuery UI), a następnie przypadkowo ponownie dołączono jQuery - spowoduje to ponowne zdefiniowanie jQuery i usunięcie pomocników składników (takich jak .datepicker) z instancji.

agrath
źródło
4
 ;(function($){
        // your code
    })(jQuery);

Umieść swój kod js w zamknięciu powyżej, to powinno rozwiązać problem.

Bikram Shrestha
źródło
4

Użyłbym tego

(function ($) {
   $(document);
}(jQuery));
Krztyna
źródło
2

Z takimi problemami spotkałem się również wielokrotnie w rozwijającym się nośniku. Właściwie to nie jest to konflikt JS. Kiedy ładujemy witrynę html do przeglądarki, nie napotykamy takiego błędu, ale kiedy ładujemy tego typu strony przez localhost, napotykamy taki problem. To z powodu lokalnego hosta. Kiedy ładujemy skrypty za pośrednictwem hosta lokalnego, skanuje on skrypt i renderuje dane wyjściowe. Ale kiedy nie używaliśmy localhost. Po prostu skanuje dane wyjściowe. Na przykład, kiedy piszemy kod php, umieszczamy go na lokalnym serwerze i uruchamiamy bez hosta, otrzymujemy błąd. Ale jeśli kod jest poprawny i jest uruchamiany przez hosta, otrzymujemy rzeczywisty wynik, a kiedy używamy elementu inspect, otrzymujemy kod wyjściowy w formacie HTMl, ale nie w formacie PHP, dzieje się tak z powodu renderowania kodu.

To jest błąd renderowania. Aby naprawić ten błąd kodu jQuery, jedno z rozwiązań może używać tej metody.

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Ten kod rejestruje „$” jako zmienną funkcji przez zastosowanie jquery. W przeciwnym razie plik .js jest odczytywany domyślnie tylko jako javascript.

Rajan Lama
źródło
1

Napotkałem ten problem również wtedy, gdy włączałem jQuery do nagłówka mojej strony, nie zdając sobie sprawy, że host już automatycznie włączał go do strony. Więc załaduj swoją stronę na żywo i sprawdź źródło, aby zobaczyć, czy jQuery jest linkowany.

FrostyL
źródło
1

Dwie rzeczy:

  1. Upewnij się, że przed $ (dokumentem) dodano bibliotekę jQuery.
  2. Następnie po prostu zmień wszystkie „$” na: jQuery, tak jak w poprzednich komentarzach.
Jorge Alejandro Inturias
źródło
1

zawiń cały skrypt między to ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

Wiele bibliotek JavaScript używa znaku $ jako nazwy funkcji lub zmiennej, tak jak robi to jQuery. W przypadku jQuery $ jest tylko aliasem dla jQuery, więc wszystkie funkcje są dostępne bez użycia $. Jeśli chcesz użyć innej biblioteki JavaScript obok jQuery, zwróć kontrolę $ z powrotem do innej biblioteki, wywołując $ .noConflict () . Stare odwołania do $ są zapisywane podczas inicjalizacji jQuery; noConflict () po prostu je przywraca.

Jitendra Damor
źródło
1

W poniższym fragmencie możesz użyć zarówno jQuery, jak i $. to działało dla mnie

jQuery( document ).ready(function( $ ) {
  // jQuery(document)
  // $(document)
});
Kalpesh Prajapati
źródło
1

Możesz przekazać $ w funkcji ()

jQuery(document).ready(function($){

// jQuery code is in here

});

lub możesz zastąpić $(document);tymjQuery(document);

lub możesz użyć jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
Ganesh
źródło