2009-07-31 12 views
85

Gdy używam DatePicker, plugin UI jQuery, w istniejącej strony .aspx pojawiają się błędy, które datepicker nie jest funkcją.":

$("#datepicker").datepicker is not a function 

Jednak, gdy Kopiuję i wklejam ten sam kod, który tworzy i używa datePicker do pliku HTML, który również znajduje się w tym samym katalogu, co strona aspx, działa bezbłędnie. To prowadzi mnie do założenia, że ​​na stronie aspx znajdują się pliki JS, które uniemożliwiają prawidłowe załadowanie plików JS do datPicker lub jQuery.

Czy ktoś może potwierdzić moje przekonania lub udzielić wskazówek dotyczących znajdowania sprawcy zakłócającego wtyczki interfejsu JQuery?

+0

Czy możesz zamieścić odpowiedni kod jQuery, proszę –

+0

W jaki sposób dołączasz wtyczkę datepicker na stronie - czy jest to w ScriptManagerProxy, czy piszesz ją bezpośrednio na stronie? Czy jesteś pewien, że jest on ładowany? Jeśli tak, to jakie inne wtyczki dołączasz? Czy na pewno umieściłeś ui.core.js? –

+12

Znalazłem problem. Szkoda, że ​​nie znalazłem tego rozwiązania wczoraj jako przeciwnego do 1 godziny po opublikowaniu tego pytania. Kod JS, który napisałem, odwołuje się do jQuery, a plik javascript jQuery UI działa jako moduł. Jego rodzic również odwołuje się do jQuery na dole znacznika body (tak więc 2 odniesienia do jQuery). Ponieważ jQuery jest reinicjalizowany po jQuery UI, jQuery UI jest wymazywany jako wtyczka, dlatego mój kod nie mógł znaleźć wtyczki DatePicker. – burnt1ce

Odpowiedz

158

Przez wiele godzin borykałem się z podobnym problemem. Następnie okazało się, że jQuery została uwzględniona dwukrotnie, raz przez program, w którym dodałem funkcję jQuery do i raz przez nasz wewnętrzny debugger.

+3

To też był mój problem. Miałem odniesienie do mojej własnej biblioteki jQuery wraz z jQuery Tools CDN, która nieświadomie zawierała jQuery. – DavGarcia

+0

To był również mój problem. Używam superfish i ładowałem jquery. Nie zauważyłem tego aż do teraz. – rrtx2000

+20

Więc jakie rozwiązanie? –

23

Jeśli istnieje inna biblioteka, która jest za pomocą zmiennej $, można to zrobić:

var $j = jQuery.noConflict(); 
$j("#datepicker").datepicker(); 

Również upewnić JavaScript obejmuje są w odpowiedniej kolejności, tak biblioteka rdzeń jQuery jest zdefiniowana przed jQuery. ui. Miałem problemy z przyczyną.

+0

Upewnij się także, że zawiera JavaScript w poprawnej kolejności, więc biblioteka rdzenia jquery jest zdefiniowana przed jquery.ui. Miałem problemy z przyczyną << to jest poprawna odpowiedź dla mnie. – macaesar

+1

To nie działało dla mnie nadal –

8

Jeśli uważasz, że jest konflikt, możesz użyć kodu jQuery.noConflict(). Szczegóły są podane w docs.

Odwoływanie Magic - skróty do jQuery

Jeśli nie podoba wpisując pełną "jQuery" cały czas istnieją pewne alternatywne skróty:

Przypisz jQuery do innego skrótu var $j = jQuery; (To może być najlepsze podejście, jeśli chcesz korzystać z różnych bibliotek ) Użyj poniższej techniki: , która pozwala użyć $ wewnątrz bloku kodu bez trwale nadpisywania $:

(function($) { /* some code that uses $ */ })(jQuery) 

Uwaga: W przypadku korzystania z tej techniki, nie będzie w stanie wykorzystać metod Prototype wewnątrz tego capsuled funkcję oczekiwać $ to be Prototype's $, więc robisz wybór, aby używać tylko jQuery w tym bloku . Użyć argumentu do gotowego zdarzenia DOM :

jQuery(function($) { /*some code that uses $ */ }); 

Uwaga: Ponownie wewnątrz tego bloku nie można używać metod Prototype

ów od końca docs i może ci się przydać

3

Czy próbowałeś użyć Firebug do 1) ustalić, że nie ma błędów Javascript i 2), że # datepick er element istnieje na stronie?

Najprawdopodobniej wystąpił błąd przed wywołaniem zestawu danych, który uniemożliwia wykonanie wywołania zestawu danych.

17

Ten błąd pojawia się zwykle, gdy brakuje pliku z zestawu interfejsu użytkownika jQuery.

Sprawdź dokładnie, czy masz wszystkie pliki, pliki jQuery UI, a także CSS i obrazy oraz czy znajdują się one w poprawnie połączonym pliku/katalogu na serwerze.

+0

Ta odpowiedź jest najbliższa rozwiązaniu, które napisałem. – burnt1ce

+0

Możesz również opublikować swój komentarz jako własną odpowiedź i zaakceptować go później. – random

+0

Uwaga dla siebie: upewnij się, że przy przełączaniu z plików lokalnych na pliki CDN google masz właściwy adres URL. To ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js, a nie ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery-ui.min.js, cholera. – neminem

5

Przejdź na stronę oczywistą: Czy dobrze odwołujesz się do pliku jquery-ui.js?

Spróbuj użyć karty sieciowej firebug, aby sprawdzić, czy jest ona załadowana, lub informacji \ Wyświetl kod javascript na pasku narzędzi dla webmasterów.

1

Po prostu miałem ten problem, a przeniesienie odniesień JS i kodu w kierunku dolnej części strony przed tagiem </body> naprawił go dla mnie.

1

Sprawdź również uprawnienia do katalogu, do którego pobierasz pliki. Z jakiegoś powodu, kiedy to pobrałem, domyślnie zapisano go w folderze bez żadnego dostępu! Trwało to od zawsze, aby dowiedzieć się, że to był problem, ale musiałem zmienić pozwolenie na katalog i jego zawartość - ustawiając go tak, że KAŻDY = TYLKO DO ODCZYTU. Działa teraz świetnie.

0

Wpadłem ostatnio na ten problem - problem polegał na tym, że umieściłem pliki jQuery UI w tagu head, ale biblioteka Telerik, której używałem, zawierała jQuery na dole znacznika body (co najwyraźniej ponownie inicjuje jQuery i rozładowanie wczytanych wtyczek interfejsu użytkownika).

Rozwiązaniem było znalezienie miejsca, w którym jQuery była faktycznie dołączana, i uwzględnianie skryptów jQuery UI.

0

Po prostu wpadłem na podobny problem. Kiedy zmieniłem odniesienie do skryptu z samozamykających się znaczników (tj. <script src=".." />) do pustych węzłów (tj. <script src=".."></script>) moje błędy zniknęły i mogłem nagle odwołać się do funkcji jQuery UI.

W tamtym czasie nie zdawałem sobie sprawy, że to tylko bzdurny mózg, który nie zamyka się na samym początku. (Publikuję to po prostu przy okazji, że ktoś inny natknie się na podobny problem.)

0

Niektóre pliki nie ładują się przed wywołaniem.

Na przykład: Kod:

<%= javascript_include_tag "distpicker.min" %> 
<%= javascript_include_tag "distpicker.data.min" %> 

Zmień to:

<%= javascript_include_tag "distpicker.data.min" %> 
<%= javascript_include_tag "distpicker.min" %> 
2

jQuery „$ (” # datepicker „).datepicker nie jest funkcją "

Naprawiłem problem, umieszczając poniższe trzy pliki w sekcji body formularza na końcu.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script> 
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" /> 
0

mogę rozwiązać ten problem, usuwając paczkę jquery na _Layout.cshtml

Header

<script src="~/Scripts/jquery-1.10.2.js"></script> 
    <script src="~/Scripts/kendo/2015.2.902/kendo.all.min.js"></script> 
    ... 

stopka

@Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 

Zmiana stopki do

@Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false)