Buduję normalną stronę internetową, która wymaga załadowania około pięciu plików CSS i dziesięciu plików Javascript.
- Kiedy ładuję je osobno na stronie HTML, moja strona wczytuje się dobrze.
Teraz do produkcji, połączyłem cały JavaScript w jednym pliku, w wymaganej kolejności, a cały CSS w innym pliku. Ale kiedy próbuję uruchomić stronę internetową z połączonymi plikami, wyświetla błąd:
Uncaught TypeError: undefined is not a function
W wierszu, w którym plik jquery.min.js jest ładowany w połączonym pliku Javascript.
Co mogę zrobić, aby to złagodzić? Chcę połączyć wszystkie pliki i zminimalizować je do produkcji. Proszę pomóż.
EDYCJA: Połączyłem JavaScript i CSS w kolejności, w jakiej były ładowane indywidualnie i działały dobrze.
javascript
jquery
minify
ghostCoder
źródło
źródło
undefined
jeśli nie masz kodu do pokazania?Odpowiedzi:
Zakładając, że ten problem nadal nie został rozwiązany, wiele pojedynczych plików nie kończy swojego kodu średnikiem. Większość skryptów jQuery kończy się na
(jQuery)
i trzeba to mieć(jQuery);
.Jako oddzielne pliki skrypt będzie ładował się dobrze, ale jako pojedynczy plik potrzebujesz średników.
źródło
Być może będziesz musiał ponownie sprawdzić kolejność, w której scalasz pliki, powinno to wyglądać mniej więcej tak:
źródło
To rozwiązanie zadziałało dla mnie
Przenieś swój kod wewnątrz zamknięcia i użyj $ zamiast jQuery
Powyższe rozwiązanie znalazłem w /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
po przesłuchaniu za dużo
źródło
Otrzymałem ten sam błąd, mając dwa odwołania do różnych wersji jQuery.
Na mojej stronie wzorcowej:
A także na stronie:
źródło
Niedawno miałem ten problem z wtyczką jQuery Validation , używając Squishit , również otrzymując błąd js:
Naprawiłem go zmieniając odniesienie do unminified pliku jquery.validate.js zamiast jquery.validate.min.js.
Myślę, że zminimalizowana wersja niektórych plików, po dalszej kompresji, na przykład za pomocą Squishita, może w niektórych przypadkach nie poradzić sobie z brakującymi średnikami i tym podobnymi, jak sugeruje @Dustin, więc być może będziesz musiał poeksperymentować z plikami, które możesz podwójnie skompresuj i pozostaw do Squishit lub czegokolwiek, z czym się pakujesz.
źródło
Dla tych, którzy nadal nie mogli tego naprawić, zrobiłem to, zmieniając moje „this” na „$ (this)” podczas używania jQuery.
NA PRZYKŁAD:
Naprawiony:
źródło
Natknąłem się na ten sam problem, gdy błędnie nazwano zmienną o tej samej nazwie, co funkcja.
Więc to:
nie powiodło się, generowanie wspomnianego komunikatu o błędzie OP.
Naprawienie tego było tak proste, jak zmiana powyższego wiersza na:
Nie wiem, na ile to pomaga w tej sytuacji, ale postanowiłem udzielić tej odpowiedzi innym szukającym rozwiązania podobnych problemów.
źródło
Tak, naprawiłem też to, zmieniając w bibliotekach js na unminified.
Na przykład w tagu zmień:
Dla:
Wychodzenie z „min” jako niezminimalizowane.
Dzięki za pomysł.
źródło
Pamiętaj: funkcje JavaScript rozróżniają wielkość liter.
Miałem przypadek, w którym jestem prawie pewien, że mój kod będzie działał płynnie. Mimo to pojawił się błąd i sprawdziłem konsolę Javascript przeglądarki Google Chrome, aby sprawdzić, co to jest.
Moja linia błędu to
I otrzymałem ten sam komunikat o błędzie:
Nie ma nic złego w powyższym kodzie, ale nie był on uruchomiony. Rozwiązuję problem przez prawie godzinę, a następnie porównuję go z innym działającym kodem. Mój błąd polega na tym, że został ustawiony na
SetAttribute
, który powinien byćsetAttribute
.źródło
Na wypadek, gdyby byli tam jacyś kretyni tacy jak ja, miałem ten frustrujący problem, ponieważ zapomniałem prostego
new
słowo kluczowe przed utworzeniem wystąpienia nowego obiektu.
źródło
Właśnie otrzymałem tę samą wiadomość z następującym kodem (w IcedCoffeeScript):
Wydawało mi się, że to zwykły kod ICS. Rozwinąłem konstrukcję await-defer do zwykłego CoffeeScript:
To, co naprawdę się wydarzyło, to to, że próbowałem przekazać 1 funkcję zwrotną (z 2 parametrami) do funkcji
f
oczekującej dwóch parametrów, w rzeczywistości nie ustawionychcb
wewnątrzf
, co kompilator poprawnie zgłosił jakoundefined is not a function
.Błąd wystąpił, ponieważ ślepo wkleiłem standardowy kod w stylu wywołania zwrotnego.
f
nie potrzebujeerr
przekazywanego do niego parametru, więc powinno być po prostu:W ogólnym przypadku zalecałbym podwójne sprawdzenie sygnatur funkcji i wywołań pod kątem pasujących znaków. Stos wywołań w komunikacie o błędzie powinien być w stanie dostarczyć przydatnych wskazówek.
W twoim szczególnym przypadku polecam poszukać definicji funkcji pojawiających się dwukrotnie w scalonym pliku, z różnymi podpisami lub przypisaniami do zmiennych globalnych przechowujących funkcje.
źródło
Upewnij się, że skomentowałeś wszelkie komentarze. Czasami podczas kopiowania i wklejania pominiesz znak „/ *!”
Również kiedy wejdziesz do konsoli, wyświetlą listę twoich błędów i powinieneś je rozpatrywać pojedynczo. Jeśli zobaczysz komunikat „Uncaught SyntaxError: Nieoczekiwany token *” Może to oznaczać, że odczytuje plik js i nie wychodzi poza pierwszą linię.
/ *! * jquery.tools 1.1.2 - Brakująca biblioteka interfejsu użytkownika dla sieci WWW * * [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/ * Wygenerowano plik: środa 07 października 09:40:16 GMT 2009 * /
źródło
Otrzymałem to, gdy przypadkowo przekazałem zbyt wiele parametrów do funkcji jquery, która oczekiwała tylko jednego parametru wywołania zwrotnego.
W przypadku innych problemów: upewnij się, że wszystkie wywołania funkcji jQuery zawierają dodatkowe parametry.
źródło