TypeError: $ .datepicker n’est pas défini

mon code javascript est associé à l’une des pages de mon site:

$('#nmdt1').datetimepicker({ dateFormat: $.datepicker.ATOM, minDate: nmsdt, ... ... 

cela fonctionne correctement lorsque la page sur laquelle id = “nmdt1” est chargée. Et je charge la bibliothèque (module) datetimepicker associée uniquement lorsque je charge cette page. jusqu’ici tout va bien.

mais lorsque je charge d’autres pages sur mon site, j’obtiens cette erreur: à partir du numéro de ligne où dateformat est défini.

EDIT: voici l’erreur correcte pour le journal firebug:

 TypeError: $.datepicker is undefined http://myswbsite/jscript/myjsscript.js Line 569 

la ligne 569 est:

 dateFormat: $.datepicker.ATOM, 

et oui, cette erreur ne se produit que sur la page où je ne charge pas le code js associé (jquery-ui-timepicker-addon.js). La raison pour laquelle je ne charge pas ce JS sur chaque page est que je n’en ai besoin que sur une seule page.

PLUS DE DÉTAILS:

en-tête HTML après le chargement de la bibliothèque (en seq)

    ... ...  jQuery(document).ready(function(){ var mid = "[% mid %]"; alert('mid='+mid); $(".bvmainmenu #"+mid).css({"background":"url(/images/current-bg.gif) top left repeat-x", "color":"#ffffff"}); });   

Ce dernier code javascript que vous voyez ci-dessus (en bas de l’en-tête) ne s’exécute pas à chaque fois que la lib jquery-ui-timepicker-addon.js n’est pas chargée (et que vous voyez que err dans firebug – je peux vivre avec une erreur, mais pourquoi Le dernier code ne fonctionne pas, je ne suis pas sûr). Je ne suis pas en mesure de comprendre pourquoi cette routine ne s’exécute pas simplement parce que je n’ai pas chargé une bibliothèque ‘add-on’

la page qui exécute tout correctement charge les scripts js suivants dans BODY

   

sur cette page, le dernier code javascript que vous voyez dans l’en-tête est également chargé et affiche l’alerte!

J’ai du mal à comprendre cela.

Vous semblez dire que ce code:

 $('#nmdt1').datetimepicker({ dateFormat: $.datepicker.ATOM, minDate: nmsdt, ... 

… se trouve dans votre script myjsscript.js commun, chargé sur chaque page. Si tel est le cas, cela signifie qu’elle s’exécute sur toutes les pages. Vous obtenez donc une erreur sur les pages qui ne contiennent pas non plus les scripts de plug-in supplémentaires.

Le code que j’ai cité ci-dessus ne signifie pas “Si un élément avec cet identifiant existe, appelez la méthode datetimepicker() “, cela signifie “Créez un object jQuery contenant ou non des éléments, puis appelez le datetimepicker() méthode, en passant un object avec une propriété définie sur $.datepicker.ATOM . ” C’est-à-dire que même s’il n’y a pas d’élément nmdtd1 sur la page, elle appellera toujours datetimepicker et référencera toujours $.datepicker.ATOM .

Il existe au moins trois façons de résoudre ce problème:

  1. Déplacez ce code hors du myjsscript.js commun myjsscript.js et myjsscript.js -le simplement sur la page qui en a besoin.

  2. Allez-y et incluez les fichiers JS du plug-in sur toutes les pages de votre site. Ils seront mis en cache par le navigateur. Par conséquent, la performance ne dépend pas vraiment de la performance si vos utilisateurs consultent plusieurs de vos pages.

  3. Déplacez ce code dans une condition afin que la partie .datetimerpicker() ne soit pas exécutée sauf si nécessaire.

Pour l’option 3:

 var $nmdt1 = $('#nmdt1'); if ($nmdt1.length > 0) { $nmdt1.datetimepicker({ dateFormat: $.datepicker.ATOM, minDate: nmsdt, ... }); } 

Avez-vous inclus l’ interface utilisateur de jQuery dans votre application?

   

Assurez-vous que $ est votre identifiant de raccourci jQuery. Vérifier l’utilisation de

 var $J = jQuery.noConflict(); 

Dans ce cas, essayez d’utiliser $J.datepicker