Datepicker 返回未捕获的 typeError: undefined 'currentDay'

Posted

技术标签:

【中文标题】Datepicker 返回未捕获的 typeError: undefined \'currentDay\'【英文标题】:Datepicker returning uncaught typeError: undefined 'currentDay'Datepicker 返回未捕获的 typeError: undefined 'currentDay' 【发布时间】:2013-07-20 19:47:55 【问题描述】:

我一直在使用带有 Bootstrap 的 jQuery UI,但我似乎遇到了一个以前没有遇到过的问题。我不确定发生了什么变化。我尝试过设置不同版本的 jQuery,同时我没有更新 jQuery UI。所以我不确定是什么坏了。

当我点击日期选择器中的任何日期时,来自控制台的错误返回:

Uncaught TypeError: Cannot set property 'currentDay' of undefined 

代码相当简单,正如人们对日期选择器所期望的那样:

$(".datepicker").datepicker(
dateFormat: 'dd-mm-yy'
); 

使用以下 html

<input type="text" class="datepicker" />

这是一个应该报告的错误(因为没有其他 Google 匹配项出现)还是我错过了其他什么?

【问题讨论】:

我觉得可能和jQuery UI的datepicker和boostrap的datepicker有些冲突,建议你选择一个,把另一个从js文件中去掉。 好调用,但不幸的是我只使用带有 jQ​​uery 1.7.1 和 jQuery-UI 1.9.2 的 Bootstrap CSS。我目前没有使用 Bootstrap-UI。 我发现如果使用#ID而不是.class会出现错误 @BjornSchijff 我只有在使用 Datatable 时才会遇到这个问题。在普通的 HTML 页面中,datepicker 工作得很棒。 唯一 ID 是一个很好的线索,在我的情况下,我在一个使用两次的剃须刀共享模板中 - 重复 ID 会导致问题。感谢 Bjorn 和 Harpreet,我能够解决一个类似的问题。如果您遇到此错误,请查找任何非唯一 id(如果指定了 id),不必与数据表或 bootstrap-jqueryUI 冲突相关。 【参考方案1】:

我找到了解决方案。经过长时间的调试,我发现有一个&lt;div&gt;ID 完全相同,比输入字段高。因此,脚本采用了第一个包含 ID 的实例并选择了 DIV 而不是 input 字段。

我删除/重命名了DIV,它又可以正常工作了。

【讨论】:

有时将您的页面放入 HTML 验证器非常有用! :) 非常感谢它 100% 有效,但我更改了 在这个问题上花了 2 个小时,终于找到了你的解决方案 谢谢比约恩!这完全奏效了。在我的情况下,它是一个具有相同 id 的标签。【参考方案2】:

上面的jQuery datepicker错误一般是由于有相同ID的重复控件引起的,不管你是使用id还是其他选择器比如css类或字段名来实例化它。

【讨论】:

这正是重点。不要在 datepicker 中使用 ID,使用自定义 css 类名。在弹出窗口中使用 datepicker 时我遇到了这个问题。 @tod-birdsall 和其他人,我在这里链接了同样的问题。 ***.com/questions/45883482/… 我尝试了许多解决方案,例如不同的 id、类等。无论如何,即使在这个原始线程 4 年后的 2017 年,这个问题也会出现。它是数据表或 jquery UI 的错误吗?奇怪的是,如果我尝试在输入控件中创建名称属性,它会在页面中再次重复。错误不可避免地发生。这个问题有什么可靠的解决方案。我正在使用最新版本的数据表和 jquery UI。【参考方案3】:

我通过为 HTML DOM 对象创建新 ID 解决了这个问题。有重复的 ID。 尝试为 HTML DOM 对象添加新 ID。

【讨论】:

【参考方案4】:

我也遇到了这个错误。我发现在表单的其他地方我有一些标签“for”属性与表单输入上的 id 不匹配 - 似乎这也可能会混淆 datepicker。一旦我修复了这些,一切正常,错误就消失了。接受 Andreas 的建议(为此 +1!)并验证您的表单 - Chris Pederick 的 Web 开发人员工具栏为您提供了一种简单的方法来进行验证。

【讨论】:

【参考方案5】:

放一个选择器。

<script>  $("#formID #duplicatedId").datepicker(language: 'he');
</script>

FormID:包含输入的表单的 ID。

duplicatedId:输入元素的Id。

【讨论】:

【参考方案6】:

在我的例子中,我是从 div 中针对隐藏的输入字段触发日期选择器,而 getPos(a) 导致变量“a”上出现未定义的消息。我尝试将隐藏的输入字段移到 div 之外,并且成功了。请注意,无论输入字段在哪里,jQuery 都可以找到输入字段,所以这不是问题 - 它与定位有关。希望这对其他人有帮助。

【讨论】:

【参考方案7】:

可能是两个具有相同类但没有不同 ID 的输入框,并且您正在尝试使用日期选择器。如果存在,请提供两个不同的 id,它将起作用。

【讨论】:

【参考方案8】:

我也遇到过这个问题,我 100% 确定我没有使用重复的 ID。 经过一些调试,我发现了一个原因——我使用了 DataTables mod,它复制了 tfoot 的内容,从而创建了 datepicker 元素的精确副本。我在 tfoot 行中有这个 datepicker 输入。

解决了这个问题:

table.find("TFOOT").find("TR:first").remove();

在 table.DataTable(....) 之后调用它

这删除了包含所有内容的原始零高度行;

【讨论】:

以上是关于Datepicker 返回未捕获的 typeError: undefined 'currentDay'的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的ReferenceError:$未定义 - Datepicker - Codeigniter 3

无法解决未捕获的类型错误:$(...).datepicker 不是函数

未捕获的类型错误:routes.forEach 不是函数

如何在 React 中正确捕获 Materialize-CSS datepicker 值?

datePicker 插件在 Phonegap 2.0 中不起作用

未捕获的类型错误:未定义不是日期选择器引导程序的函数