首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:未定义$.datepicker

TypeError:未定义$.datepicker
EN

Stack Overflow用户
提问于 2012-08-12 09:18:09
回答 3查看 50.2K关注 0票数 4

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

代码语言:javascript
复制
$('#nmdt1').datetimepicker({
        dateFormat: $.datepicker.ATOM,
        minDate: nmsdt,
                  ...
                  ...

当加载了id="nmdt1“的页面时,它运行得很好。并且我只在加载该页面时才加载相关的datetimepicker js库(模块)。到目前一切尚好。

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

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

代码语言:javascript
复制
TypeError: $.datepicker is undefined
http://myswbsite/jscript/myjsscript.js
Line 569

第569行是:

代码语言:javascript
复制
dateFormat: $.datepicker.ATOM,

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

更多详细信息:

在加载lib后的HTML标题中(在seq中)

代码语言:javascript
复制
<head>
    <script src="/jscript/jquery-1.8.0.min.js" type="text/javascript"></script>
    <script src="/jscript/myjsscript.js" type="text/javascript"></script>
...
...
    <script type="text/javascript">
    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"});
    });
    </script>
</head>

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

正确运行所有内容的页面会在主体中加载以下js脚本

代码语言:javascript
复制
<script src="/jscript/jquery-ui-1.8.21.custom.min.js" type="text/javascript"></script>
<script src="/jscript/jquery-ui-timepicker-addon.js" type="text/javascript"></script>

在此页面上,您在header中看到的最后一段javascript代码也会加载并显示警报!

我很难弄清楚这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-12 10:22:39

你似乎在说这段代码:

代码语言:javascript
复制
$('#nmdt1').datetimepicker({
    dateFormat: $.datepicker.ATOM,
    minDate: nmsdt,
    ...

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

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

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

  1. 将代码从通用myjsscript.js中移出,仅将其放在需要它页面上。
  2. 继续,并将插件JS文件包含在站点上的所有页面上-这些文件将由浏览器缓存,因此假设用户访问了您的多个页面,这并不会真正影响性能。
  3. 在条件中移动代码,因此除非需要,否则不会执行.datetimerpicker()部件。

G216

对于选项3:

代码语言:javascript
复制
var $nmdt1 = $('#nmdt1');
if ($nmdt1.length > 0) {
    $nmdt1.datetimepicker({
       dateFormat: $.datepicker.ATOM,
       minDate: nmsdt,
       ...
    });
}
票数 2
EN

Stack Overflow用户

发布于 2012-08-12 09:48:52

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

代码语言:javascript
复制
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.22/jquery-ui.min.js"></script>
票数 10
EN

Stack Overflow用户

发布于 2015-09-03 13:22:35

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

代码语言:javascript
复制
var $J = jQuery.noConflict();

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11918991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档