4

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

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

当加载 id="nmdt1" 的页面时,这运行良好。我仅在加载该页面时才加载相关的 datetimepicker js 库(模块)。到目前为止,一切都很好。

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

编辑:这是萤火虫日志的正确错误:

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 中)

<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>

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

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

<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>

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

我很难弄清楚这一点。

4

3 回答 3

10

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

<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>
于 2012-08-12T01:48:52.057 回答
3

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

var $J = jQuery.noConflict();

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

于 2015-09-03T05:22:35.447 回答
2

您似乎在说这段代码:

$('#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,
       ...
    });
}
于 2012-08-12T02:22:39.040 回答