jQuery kullanıcı arayüzü "$ (" # datepicker "). datepicker bir işlev değil"


125

JQuery'nin UI eklentisi olan DatePicker'ı mevcut bir .aspx sayfasında kullandığımda şu hatalar alıyorum:

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

Ancak, datePicker'ı oluşturan ve kullanan aynı kodu, aspx sayfasıyla aynı dizinde bulunan bir HTML dosyasına kopyalayıp yapıştırdığımda, kusursuz çalışıyor. Bu, aspx sayfasında datePicker'ın veya belki jQuery'nin UI JS dosyalarının düzgün yüklenmesini engelleyen bazı JS dosyaları olduğunu varsaymamı sağlıyor.

Herhangi biri inançlarımı doğrulayabilir veya jQuery'nin UI eklentilerine müdahale eden suçluyu bulma konusunda herhangi bir ipucu sağlayabilir mi?


İlgili jQuery kodunu gönderebilir misiniz lütfen
Russ Cam

Sayfaya tarih seçici eklentisini nasıl ekliyorsunuz - bir ScriptManagerProxy'de mi yoksa doğrudan sayfaya mı yazıyorsunuz? Yüklendiğinden emin misin? Eğer öyleyse, başka hangi eklentileri dahil ediyorsunuz? Ui.core.js'yi eklediğinizden emin misiniz?
James Kolpack

12
Sorunu buldum. Bu soruyu gönderdikten sonra 1 saat yerine dün bu çözümü bulmayı dilerdim. Referans yazdığım JS kodu jQuery ve jQuery UI javascript dosyası bir modül görevi gördü. Üst öğesi, gövde etiketinin altındaki jQuery'ye de başvurur (bu nedenle jQuery'ye 2 başvuru). JQuery, jQuery UI'den sonra yeniden başlatıldığından, jQuery UI bir eklenti olarak silindi, bu nedenle kodum neden DatePicker eklentisini bulamadı.
burnt1ce

Webpack kullandığım için bunun yerine jquery-ui-bundle kullanmam gerekiyordu. stackoverflow.com/a/39230057/470749
Ryan

Yanıtlar:


210

Saatlerce benzer bir problemle uğraştım. Daha sonra jQuery'nin bir kez jQuery işlevi eklediğim program tarafından ve bir kez de şirket içi hata ayıklayıcımız tarafından olmak üzere iki kez dahil edildiği ortaya çıktı.


4
Bu benim de sorunumdu. Farkında olmadan jQuery içeren jQuery Tools CDN ile birlikte kendi jQuery kitaplığıma bir referansım vardı.
DavGarcia

Bu da benim sorunumdu. Süper balık kullanıyorum ve aynı zamanda jquery yüklüyordu. Şimdiye kadar fark etmedim.
rrtx2000

45
Peki çözüm nedir?
Henrique Ordine

8
@HenriqueOrdine jQuery'nin sayfada iki kez bulunup bulunmadığını iki kez kontrol edin.
Eugene van der Merwe

Bu benim de sorunumdu. Ray varlık ardışık düzeninde ortak varlıkları kullanıyordum ve her ikisi de üst düzey meta dosyamda (application.js) jquery bildiriyordum VE JS klasörümde bir jquery min dosyası vardı. Çift beyan. Jquery bildirimini kaldırdım.
Mario

38

$ Değişkenini kullanan başka bir kitaplık varsa, bunu yapabilirsiniz:

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

Ayrıca javascript içeriğinizin doğru sırada olduğundan emin olun, böylece jquery çekirdek kitaplığı jquery.ui'den önce tanımlanır. Bu sebeple ilgili sorunlar yaşadım.


Ayrıca javascript içeriğinizin doğru sırada olduğundan emin olun, böylece jquery çekirdek kitaplığı jquery.ui'den önce tanımlanır. Bu sebeple ilgili sorunlar yaşadım << bu benim için doğru cevap.
macaesar

22

Bu hata genellikle jQuery UI kümesinden bir dosya eksik olduğunda görünür.

Tüm dosyalara, jQuery UI dosyalarına, CSS'ye ve görüntülere sahip olduğunuzu ve bunların sunucunuzda doğru şekilde bağlanmış dosya / dizin konumunda olduğunu iki kez kontrol edin.


Bu cevap, yayınladığım çözüme en yakın olanıdır.
burnt1ce

Kendinize not: Yerel dosyalardan Google'ın CDN dosyalarına geçerken, aslında doğru URL'ye sahip olduğunuzdan emin olun. Ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js, ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery-ui.min.js değil, salladı.
neminem

17

jQuery "$ (" # datepicker "). datepicker bir işlev değil"

Aşağıdaki üç dosyayı formun sonundaki gövde bölümüne yerleştirerek sorunu çözdüm.

  <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" />

1
Sen bir hayat kurtarıcısın, her nasılsa tüm cevaplardan, 2 günlük kesintisiz mücadelenin ardından beni kurtaran BU'du.
Tejas Jaggi

8

Eğer bir çakışma olduğunu düşünüyorsanız jQuery.noConflict()kodunuzda kullanabilirsiniz . Ayrıntılar dokümanlardadır .

MAGIC'E BAŞVURMA - JQUERY İÇİN KISAYOLLAR

Her zaman tam "jQuery" yazmaktan hoşlanmıyorsanız, bazı alternatif kısayollar vardır:

JQuery'yi başka bir kısayola yeniden atayın var $j = jQuery;(Farklı kitaplıklar kullanmak istiyorsanız bu en iyi yaklaşım olabilir) Kalıcı olarak $ üzerine yazmadan bir kod bloğunun içinde $ kullanmanıza izin veren aşağıdaki tekniği kullanın:

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

Not: Bu tekniği kullanırsanız, $ 'ın Prototype's $ olmasını bekleyen bu kapsüllü işlev içinde Prototip yöntemlerini kullanamazsınız, bu nedenle bu blokta yalnızca jQuery kullanmayı seçersiniz. DOM ready olayının bağımsız değişkenini kullanın:

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

Not: Yine, bu bloğun içinde Prototip yöntemlerini kullanamazsınız

Bu, belgelerin sonundan geliyor ve sizin için yararlı olabilir


7

Önce bariz olanı deneyin: jquery-ui.js dosyasına iyi bir şekilde başvuruyor musunuz?

Yüklenip yüklenmediğini bulmak için firebug'ın ağ sekmesini veya Web Developer Toolbar'ın Information \ View javascript kodunu kullanmayı deneyin.


3

1) Javascript hatası olmadığını ve 2) #datepicker öğesinin sayfada mevcut olduğunu belirlemek için Firebug kullanmayı denediniz mi?

Büyük olasılıkla, tarih seçici çağrısından önce, tarih seçici çağrısının yürütülmesini engelleyen bir hata vardır.


2

Bu gönderinin oldukça eski olduğunu biliyorum, ancak referans için bu sorunu tarih seçici sürümünü güncelleyerek düzelttim

Saatlerce hata ayıklamadan kaçınmak için bunu denemeye değer.

https://cdnjs.com/libraries/bootstrap-datepicker


2
Bu, Jquery UI tarih seçici için geçerli değildir. Bootstrap tarih seçici tamamen farklı bir hayvandır.
RedSands

1

Bu sorunu yeni yaşadım ve JS referanslarını ve kodu, </body>etiket benim için düzeltmeden önce sayfanın altına taşıdım.


1

Dosyaları indirdiğiniz dizinin izinlerini de kontrol edin. Bazı nedenlerden dolayı bunu indirdiğimde, varsayılan olarak erişime izin verilmeyen bir klasöre kaydedildi! Sorunun bu olduğunu anlamak sonsuza kadar sürdü, ancak dizin ve içeriği için izni değiştirmek zorunda kaldım - bunu HERKES = YALNIZCA OKUYUN şeklinde ayarlayarak. Şimdi harika çalışıyor.


1

Son zamanlarda bu sorunla karşılaştım - sorun jQuery UI dosyalarını head etiketine eklemiş olmamdı, ancak kullandığım Telerik kitaplığı gövde etiketinin altında jQuery içeriyordu (bu nedenle görünüşe göre jQuery yeniden başlatılıyor ve UI kaldırılıyor) önceden yüklenmiş eklentiler).

Çözüm, jQuery'nin gerçekte nerede dahil edildiğini bulmak ve bundan sonra jQuery UI komut dosyalarını dahil etmekti.


0

Ben de benzer bir sorunla karşılaştım. Komut dosyası referansımı kendi kendine kapanan etiketlerden (yani <script src=".." />) boş düğümlere (ör.<script src=".."></script> hatalarım ortadan kalktı ve aniden jQuery UI işlevlerine referans verebildim.

O zamanlar bunun, başlangıçta onu düzgün kapatmamamın sadece bir beyin osuruğu olduğunu fark etmemiştim. (Bunu sadece ileti dizisine giren başka birinin de benzer bir sorun yaşıyor olması ihtimaline göre gönderiyorum.)


0

Aramadan önce bazı dosyalar yüklenmez.

Örneğin: Kodunuz:

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

Şuna değiştirin:

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

0

_Layout.cshtml'deki jquery paketini kaldırarak bu sorunu çözebilirim

Başlık

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

Alt Bilgi

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

Altbilgiyi şu şekilde değiştir:

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

0

$ ("# <% = TxtDateElementId.ClientID%>"). Datepicker (); $ ("# txtDateElementId") yerine. datepicker (); JQuery kullanarak kimliğe göre bir öğe seçerken.


-1

Benim durumumda, aşağıdaki komut dosyalarının içe aktarma sırasını değiştirerek çözüldü: Önce (Çalışmıyor):

(Çalıştıktan) Sonra:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.