【问题标题】:Bootstrap datepicker setting startdate fails引导 datepicker 设置 startdate 失败
【发布时间】:2016-11-21 10:01:55
【问题描述】:

我正在使用 Bootstrap Datapicker 脚本 (Link here) 并且在设置开始日期时遇到问题。

选项:开始日期

日期或字符串。默认值:开始时间

可以选择的最早日期;所有较早的日期都将被禁用。

日期应为当地时区。字符串必须可以用format 解析。

JavaScript:

function initializeDatePicker() {
    if ($.isFunction($.fn.datepicker)) {
        var datepickerLang = lang;
        if (datepickerLang === "nl") {
            datepickerLang = "nl-BE";
        }

        $(".input-group.date input").datepicker({
            autoclose: true,
            todayBtn: "linked",
            clearBtn: true,
            todayHighlight: true,
            language: datepickerLang,
            format: "dd-mm-yyyy",
            startDate: $(this).data("startdate")
        });
    }
}

HTML:

<div class="input-group date small">
    <input id="StartDate" class="form-control" name="StartDate" value="" data-is-required="True" data-startdate="01-12-2016" type="text">
    <div class="input-group-addon">
        <span class="fa fa-calendar"></span>
    </div>
</div>

什么有效?

如果我将startdate 硬编码为:

startDate: new Date() => today

startDate: "01-12-2016"

什么不起作用?

如果我尝试从我的数据属性中获取日期,则没有任何效果。

startDate: new Date($(this).data("startdate")) => returns 'Date Invalid'

startDate: $(this).data("startdate")

我不明白出了什么问题以及如何解决它。

【问题讨论】:

  • @GeorgeLee 不起作用。如果我将日期硬编码为“01/12/2016”
  • 因此,如果您记录“this”的值,则结果是文档,因此您必须将其替换为 $("#StartDate").data("startdate")
  • 请注意,日期选择器也支持数据属性初始化,因此在您的情况下,您可以使用data-date-start-date 而不是data-startdate

标签: javascript twitter-bootstrap datepicker bootstrap-datepicker


【解决方案1】:

问题是你正在使用

$(this).data("startdate")

在这种情况下,“this”被设置为文档,因此它将返回 null/undefined。 你需要做的就是把它改成这个

$("#StartDate").data("startdate")

----编辑---------------

如果你想在一个页面上使用一次,但有多个日期选择器,你可以使用 insead 的数据属性,所以从选项中删除 startDate

$(".input-group.date input").datepicker({
    autoclose: true,
    todayBtn: "linked",
    clearBtn: true,
    todayHighlight: true,
    language: datepickerLang,
    format: "dd-mm-yyyy",
});

在你的 html 中,在 datapickers 上添加这个属性

data-date-start-date="01-12-2016" 

【讨论】:

  • 我遇到的问题是我有一个设置数据选择器的函数。此答案不适用于多个日期选择器。我在问题中添加了完整的功能。
  • 嗯,在这种情况下,使用数据属性可能会更好,我会更改答案以反映
【解决方案2】:

日期选择器支持data attributes initialization,因此您可以在HTML 中使用data-date-start-date 而不是data-startdate

这是一个工作示例:

$(".input-group.date").datepicker({
  autoclose: true,
  todayBtn: "linked",
  clearBtn: true,
  todayHighlight: true,
  language: 'nl',
  format: "dd-mm-yyyy"
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.4/css/bootstrap-datepicker3.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.4/js/bootstrap-datepicker.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.4/locales/bootstrap-datepicker.nl.min.js"></script>

<div class="input-group date small" data-date-start-date="01-12-2016">
    <input id="StartDate" class="form-control" name="StartDate" value="" data-is-required="True" type="text">
    <div class="input-group-addon">
        <span class="fa fa-calendar"></span>
    </div>
</div>

请注意,由于您使用的是 component 标记,data-date-* 属性必须位于 div 而不是 input 上,而且您的选择器应该是 $(".input-group.date") 而不是 @987654332 @。

【讨论】:

  • 完全忘记了这一点。这行得通,但我只需将 data-startdate 更改为 data-date-start-date 在下面的答案中提到。
  • 小问题,也许你知道这个。如果我只想在单击图标时显示日历?你知道如何实现吗?
  • @NanouPonette 将data-date-start-date 添加到input 对我不起作用,但如果适合您,可以选择其他答案。虽然我不鼓励在 cmets 中提出新问题,但添加 showOnFocus: false 只会在单击图标时显示日历。
  • 谢谢!你很有帮助。
  • @George 感谢您的澄清。根据demo 类型component,我已将选择器更改为$(".input-group.date")。请注意,使用我的代码,您可以单击日历图标打开选择器(正如 OP 稍后在 cmets 中询问的那样),而您的代码无法管理 input-group-addon。无论如何,我是你的答案的支持者之一:D
【解决方案3】:

它不起作用,因为 startDate 选项中的 $(this) 不是对输入元素的引用。您应该使用 .each 并为选择器中的所有元素一一设置数据选择器:

$(".input-group.date input").each(function () {
    $(this).datepicker({
        autoclose: true,
        todayBtn: "linked",
        clearBtn: true,
        todayHighlight: true,
        language: datepickerLang,
        format: "dd-mm-yyyy",
        startDate: $(this).data("startdate")
    })
});

【讨论】:

    【解决方案4】:

    首先,确保您的日期数据变量具有良好的价值,例如通过在构造 datePicker 之前打印它

    然后,当您希望通过良好的格式获得良好的价值时,您可以将其传递给 startDate 属性:

    • 通过给出必须用“格式”解析的日期字符串
    • 或者通过将 Date 对象构造为流:new Date(yyyy,mm,dd) (通过拆分数据变量的内容)。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多