jQuery UI "$ (" # datepicker "). datepicker n'est pas une fonction"

125

Lorsque j'utilise DatePicker, le plugin d'interface utilisateur de jQuery, dans une page .aspx existante, j'obtiens des erreurs qui:

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

Cependant, lorsque je copie et colle le même code qui crée et utilise le datePicker dans un fichier HTML qui se trouve également dans le même répertoire que la page aspx, cela fonctionne parfaitement. Cela m'amène à supposer qu'il existe des fichiers JS dans la page aspx qui empêchent le chargement correct des fichiers datePicker ou peut-être jQuery UI JS.

Quelqu'un peut-il confirmer mes convictions ou fournir des conseils pour trouver le coupable qui interfère avec les plugins d'interface utilisateur de jQuery?

burnt1ce
la source
Pouvez-vous publier le code jQuery pertinent s'il vous plaît
Russ Cam
Comment incluez-vous le plugin datepicker sur la page - est-ce dans un ScriptManagerProxy ou l'écrivez-vous directement dans la page? Êtes-vous sûr qu'il est en cours de chargement? Si oui, quels autres plugins incluez-vous? Êtes-vous sûr d'avoir inclus ui.core.js?
James Kolpack
12
J'ai trouvé le problème. J'aurais aimé avoir trouvé cette solution hier, par opposition à 1h après avoir posté cette question. Le code JS que j'ai écrit fait référence au fichier javascript jQuery et jQuery UI agissait comme un module. Son parent fait également référence à jQuery en bas de la balise body (donc 2 références à jQuery). Étant donné que jQuery est réinitialisé après jQuery UI, jQuery UI est effacé en tant que plugin, d'où la raison pour laquelle mon code n'a pas pu trouver le plugin DatePicker.
burnt1ce
Depuis que j'utilise Webpack, je devais utiliser jquery-ui-bundle à la place. stackoverflow.com/a/39230057/470749
Ryan

Réponses:

210

J'ai lutté avec un problème similaire pendant des heures. Il s'est ensuite avéré que jQuery était inclus deux fois, une fois par le programme auquel j'ajoutais une fonction jQuery et une fois par notre débogueur interne.

Eugène van der Merwe
la source
4
C'était aussi mon problème. J'avais une référence à ma propre bibliothèque jQuery avec le CDN jQuery Tools qui incluait sans le savoir jQuery.
DavGarcia
C'était aussi mon problème. J'utilise superfish et il chargeait également jquery. Je ne l'ai pas remarqué jusqu'à présent.
rrtx2000
45
Alors quelle est la solution?
Henrique Ordine
8
@HenriqueOrdine vérifiez deux fois que jQuery n'est pas inclus deux fois sur la page.
Eugene van der Merwe
C'était aussi mon problème. J'utilisais des actifs communs dans le pipeline d'actifs rails et déclarais à la fois jquery dans mon fichier méta de niveau supérieur (application.js) ET j'avais un fichier jquery min dans mon dossier JS. Double-déclarer. Je viens de supprimer la déclaration jquery.
Mario
38

S'il existe une autre bibliothèque qui utilise la variable $, vous pouvez le faire:

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

Assurez-vous également que vos inclusions javascript sont dans le bon ordre afin que la bibliothèque principale de jquery soit définie avant le jquery.ui. J'ai eu des problèmes de cause.

MacAnthony
la source
Assurez-vous également que vos inclusions javascript sont dans le bon ordre afin que la bibliothèque principale de jquery soit définie avant le jquery.ui. J'ai eu des problèmes de cause << c'est la bonne réponse pour moi.
macaesar
22

Cette erreur apparaît généralement lorsque vous manquez un fichier de l'ensemble de l'interface utilisateur jQuery.

Vérifiez que vous avez tous les fichiers, les fichiers de l'interface utilisateur jQuery, ainsi que le CSS et les images, et qu'ils se trouvent dans l'emplacement du fichier / répertoire correctement lié sur votre serveur.

Aléatoire
la source
Cette réponse est la plus proche de la solution que j'ai publiée.
burnt1ce
Remarque pour vous-même: assurez-vous que lorsque vous passez des fichiers locaux aux fichiers CDN de Google, vous avez réellement la bonne URL. Il s'agit d'ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js, pas d'ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery-ui.min.js, dang it.
neminem
17

jQuery "$ (" # datepicker "). datepicker n'est pas une fonction"

J'ai résolu le problème en plaçant les trois fichiers ci-dessous dans la section corps du formulaire à la fin.

  <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" />
Krishna
la source
1
Vous êtes un sauveur de vie, en quelque sorte de toutes les réponses, c'est celle-ci qui m'a sauvé après 2 jours de lutte ininterrompue.
Tejas Jaggi
8

Si vous pensez qu'il y a un conflit, vous pouvez utiliser jQuery.noConflict()dans votre code. Les détails sont dans les documents .

REFERENCING MAGIC - RACCOURCIS POUR JQUERY

Si vous n'aimez pas taper le "jQuery" complet tout le temps, il existe quelques raccourcis alternatifs:

Réaffectez jQuery à un autre raccourci var $j = jQuery;(cela peut être la meilleure approche si vous souhaitez utiliser différentes bibliothèques) Utilisez la technique suivante, qui vous permet d'utiliser $ à l'intérieur d'un bloc de code sans écraser définitivement $:

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

Remarque: Si vous utilisez cette technique, vous ne pourrez pas utiliser les méthodes Prototype dans cette fonction encapsulée qui s'attendent à ce que $ soit le $ de Prototype, vous faites donc le choix d'utiliser uniquement jQuery dans ce bloc. Utilisez l'argument de l'événement DOM ready:

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

Remarque: encore une fois, à l'intérieur de ce bloc, vous ne pouvez pas utiliser les méthodes Prototype

Cela vient de la fin de la documentation et pourrait vous être utile

AutomatedTester
la source
7

Commencez par l'évidence: référencez-vous bien le fichier jquery-ui.js?

Essayez d'utiliser l'onglet réseau de firebug pour savoir s'il est chargé, ou le code javascript Information \ View de la barre d'outils Web Developer.

eKek0
la source
3

Avez-vous essayé d'utiliser Firebug pour 1) déterminer qu'il n'y a pas d'erreurs Javascript et 2) que l'élément #datepicker existe sur la page?

Il y a probablement une erreur avant l'appel de datepicker qui empêche l'exécution de l'appel de datepicker.

1kevgriff
la source
2

Je sais que cet article est assez ancien, mais pour référence, j'ai résolu ce problème en mettant à jour la version de datepicker

Cela vaut la peine d'essayer cela aussi pour éviter des heures de débogage.

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

Yannickv
la source
2
Cela ne s'applique pas à Jquery UI datepicker. Le datepicker Bootstrap est un tout autre animal.
RedSands
1

Je viens d'avoir ce problème et déplacer les références JS et le code vers le bas de la page avant que la </body>balise ne le corrige pour moi.

Banjer
la source
1

Vérifiez également les autorisations pour le répertoire dans lequel vous téléchargez les fichiers. Pour une raison quelconque, lorsque j'ai téléchargé ceci, par défaut, il a été enregistré dans un dossier sans accès autorisé! Il a fallu une éternité pour comprendre que c'était le problème, mais je devais juste changer l'autorisation pour le répertoire et son contenu - en le définissant ainsi TOUT LE MONDE = LIRE UNIQUEMENT. Fonctionne très bien maintenant.

Matthew Fries
la source
1

J'ai récemment rencontré ce problème - le problème était que j'avais inclus les fichiers de l'interface utilisateur jQuery dans la balise head, mais la bibliothèque Telerik que j'utilisais incluait jQuery au bas de la balise body (ré-initialisant apparemment jQuery et déchargeant l'interface utilisateur plugins précédemment chargés).

La solution était de savoir où jQuery était réellement inclus, et d'inclure les scripts de l'interface utilisateur jQuery par la suite.


la source
0

Je viens de rencontrer un problème similaire. Lorsque j'ai changé ma référence de script de balises à fermeture automatique (c'est-à-dire <script src=".." />) à des nœuds vides (c'est-à-dire <script src=".."></script>), mes erreurs ont disparu et j'ai pu soudainement référencer les fonctions de l'interface utilisateur jQuery.

À l'époque, je n'avais pas réalisé que c'était juste un pet de cerveau de ne pas le fermer correctement pour commencer. (Je publie ceci simplement au cas où quelqu'un d'autre rencontrant le fil aurait un problème similaire.)

Peter Bernier
la source
0

Certains fichiers ne sont pas chargés avant d'appeler.

Par exemple: Votre code:

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

Changez pour ceci:

<%= javascript_include_tag "distpicker.data.min" %>
<%= javascript_include_tag "distpicker.min" %>
David Tsang
la source
0

Je pourrais résoudre ce problème en supprimant le bundle jquery sur le _Layout.cshtml

Entête

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

Bas de page

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

Changer le pied de page en

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

Avez-vous essayé d'utiliser $ ("# <% = txtDateElementId.ClientID%>"). Datepicker (); au lieu de $ ("# txtDateElementId"). datepicker (); lors de la sélection d'un élément par ID à l'aide de JQuery.

Emil Filip
la source
-1

Dans mon cas, cela a été résolu en modifiant l'ordre d'importation des scripts suivants: Avant (ne fonctionne pas):

Après le travail):

Matías W.
la source