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
。
至少有三种方法可以解决这个问题:
-
将该代码移出常见的
myjsscript.js
然后将其放在需要它的一个页面上。 -
继续在您网站的所有页面上包含插件JS文件 – 它们将被浏览器缓存,因此,假设您的用户无论如何都要访问您的几个页面,这并不是真正的性能影响。
-
在有条件的情况下移动该代码,以便除非需要,否则不执行
.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