TypeError:$ .datepicker未定义

我的javascript有代码,对于我网站上的其中一个页面:

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

这个运行正常,当加载id =“nmdt1”的页面时。 并且我只在加载该页面时加载相关的datetimepicker js库(模块)。 到现在为止还挺好。

但是当我在我的网站上加载任何其他页面时,我得到了这个错误:从定义了dateformat的行号。

编辑:这是firebug日志的正确错误:

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

第569行是:

 dateFormat: $.datepicker.ATOM, 

是的,这个错误只出现在我没有加载相关的js代码的页面上(jquery-ui-timepicker-addon.js)。 我没有在每个页面上加载这个js的原因是,我只在一页上需要它。

更多细节:

在lib加载后的HTML头文件中(在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"}); });   

你上面看到的最后一个javascript代码(标题的底部)每次没有加载jquery-ui-timepicker-addon.js lib时都没有运行(你在firebug中看到错误 – 我可以忍受错误,但为什么会这样最后一个代码没有运行,我不确定)。 我无法理解为什么这个例程不会因为我没有加载一个’附加’库而运行

运行所有内容的页面正确加载BODY中的js脚本

   

在此页面上,您在标题中看到的最后一个JavaScript代码也会加载并显示警报!

我很难想到这一点。

你似乎在说这段代码:

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

…位于每个页面上加载的常用myjsscript.js脚本中。 如果是这样,这意味着它在每个页面上运行,因此您在不包含额外插件脚本的页面上会出现错误。

我上面引用的代码并不意味着“如果存在具有该id的元素调用datetimepicker()方法”,则表示“创建一个jQuery对象,该对象可能包含或不包含任何元素,然后调用datetimepicker()方法,传递属性设置为$.datepicker.ATOM的对象。“ 也就是说,即使页面上没有nmdtd1元素,它仍然会调用datetimepicker并仍然引用$.datepicker.ATOM

至少有三种方法可以解决这个问题:

  1. 将该代码移出常见的myjsscript.js然后将其放在需要它的一个页面上。

  2. 继续在您网站的所有页面上包含插件JS文件 – 它们将被浏览器缓存,因此,假设您的用户无论如何都要访问您的几个页面,这并不是真正的性能影响。

  3. 在有条件的情况下移动该代码,以便除非需要,否则不执行.datetimerpicker()部分。

对于选项3:

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

您是否在应用程序中包含了jQuery UI 。

   

确保$是您的jquery快捷方式标识符。 检查用法

 var $J = jQuery.noConflict(); 

在这种情况下尝试使用$J.datepicker