2009-07-31 126 views
85

当我使用的DatePicker,jQuery的UI插件,在现有的.aspx页面中,我得到的错误,日期选择器是不是一个函数。”:

$("#datepicker").datepicker is not a function 

然而,当我将创建和使用datePicker的相同代码复制并粘贴到与aspx页面位于同一目录中的HTML文件,它的工作原理完美无瑕。这导致我假定aspx页面中有一些JS文件阻止了datePicker或者jQuery的UI JS文件加载正确。

任何人都可以证实我的信仰或提供任何提示找到干扰jQuery的UI插件的罪魁祸首?

+0

您可以发布相关的jQuery代码请 – 2009-07-31 14:03:04

+0

您如何在页面上包含datepicker插件 - 它是在ScriptManagerProxy中还是直接写入页面?你确定它正在被加载吗?如果是这样,你还包括哪些其他插件?你确定你已经包含了ui.core.js吗? – 2009-07-31 14:07:45

+12

我发现了这个问题。我希望我昨天发现了这个解决方案,反对发布这个问题后的1小时。 我写的JS代码引用jQuery和jQuery UI JavaScript文件充当模块。它的父母也在body标签的底部引用jQuery(所以2个引用jQuery)。由于jQuery在jQuery UI之后重新初始化,因此jQuery UI作为插件被删除,因此为什么我的代码找不到DatePicker插件。 – burnt1ce 2009-07-31 15:16:00

回答

158

我挣扎了几个小时的类似问题。然后,事实证明,jQuery包含了两次,一次是我通过我们的内部调试器添加jQuery函数的程序。

23

如果是使用变量$另一个库,你可以这样做:

var $j = jQuery.noConflict(); 
$j("#datepicker").datepicker(); 

另外,还要确保你的JavaScript包括在正确的顺序,以便了jQuery核心库jQuery的定义。 UI。我遇到了这个问题。

+0

还要确保你的JavaScript包括正确的顺序,所以jquery核心库是在jquery.ui之前定义的。我遇到过这样的问题<<这对我来说是正确的答案。 – macaesar 2013-10-17 10:38:10

8

如果您认为存在冲突,您可以在代码中使用jQuery.noConflict()。详情请见docs

REFERENCING MAGIC - 快捷方式 JQUERY

如果您不喜欢键入完整 “jQuery的” 的时候,也有一些 替代快捷键:

jQuery的重新分配到其他快捷方式 var $j = jQuery;(如果您希望使用 不同的库,这可能是最佳方法)使用以下 技术,该技术允许您使用$ 的代码块里面没有 永久覆盖$:

(function($) { /* some code that uses $ */ })(jQuery) 

注:如果您使用此 技术,您将无法使用这里面 原型方法胶囊包裹 功能期待$是 原型的$,所以你在 块中选择 只能使用jQuery。使用参数的DOM ready事件:

jQuery(function($) { /*some code that uses $ */ }); 

注: 再次,块内不能使用 原型方法

那是从文档的末尾并可能对您有用

3

您是否尝试过使用Firebug来1)确定没有Javascript错误和2)#datepick er元素存在于页面上?

很可能在datepicker调用之前发生错误,导致datepicker调用无法执行。

17

当您从jQuery UI集中缺少文件时,通常会出现此错误。

仔细检查您是否拥有所有文件,jQuery UI文件以及CSS和图像,以及它们是否位于服务器上正确链接的文件/目录位置。

5

寻找明显的第一步:您是否很好地引用了jquery-ui.js文件?

尝试使用Firebug的网络选项卡来查找它是否已加载,或Web Developer Toolbar的Information \ View JavaScript代码。

1

我刚刚遇到了这个问题,并且在</body>标记为我修复之前,将JS引用和代码移到页面底部。

1

另请检查将文件下载到的目录的权限。出于某种原因,当我下载它时,默认情况下它被保存在一个不允许访问的文件夹中!我们花了很长时间才发现问题所在,但我只需要更改目录的权限和内容 - 将其设置为每个人都只读。现在效果很好。

0

最近我遇到了这个问题 - 问题是我已经将jQuery UI文件包含在头标记中,但我正在使用的Telerik库在body标记的底部包含了jQuery(因此显然重新初始化了jQuery并卸载以前加载的UI插件)。

解决方案是找出jQuery实际上包含在哪里,然后包括jQuery UI脚本。

0

我刚碰到类似的问题。当我将自我结束标记(即<script src=".." />)的脚本引用更改为空节点(即<script src=".."></script>)时,我的错误消失了,我可能突然引用了jQuery UI函数。

当时,我没有意识到这仅仅是一个脑袋,我没有正确地关上它。 (我只是发布这个简单的机会,任何人碰到线程都有类似的问题。)

0

某些文件没有负载之前,你打电话。

例如: 您的代码:

<%= javascript_include_tag "distpicker.min" %> 
<%= javascript_include_tag "distpicker.data.min" %> 

改成这样:

<%= javascript_include_tag "distpicker.data.min" %> 
<%= javascript_include_tag "distpicker.min" %> 
2

jQuery的“$(”#日期选择器“)。日期选择器不是一个功能“

我已经解决了这个问题,将下面的三个文件放在表单的主体部分末尾。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script> 
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" /> 
0

我能解决这个问题的_Layout.cshtml删除了jQuery束

页眉

<script src="~/Scripts/jquery-1.10.2.js"></script> 
    <script src="~/Scripts/kendo/2015.2.902/kendo.all.min.js"></script> 
    ... 

页脚

@Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 

更改页脚

@Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false)