20

我有一个带有用户出生日期的 div,其中预先填充了 php:

<div id="datepicker" class="input-group date">
    <label for="dob">Date of Birth</label> <input type="text" class="form-control" id="dob" name="dob" value="<?php $date = new DateTime($this->swimmers->dob); echo $date->format('d/m/Y');?>"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
</div>

的JavaScript:

<script>     
    $('.container .input-group.date').datepicker({
    startDate: "01/01/1900",
    endDate: "01/01/2100",
    format: "dd/mm/yyyy",
    autoclose: true,
    todayHighlight: true
    });
</script>

Bootstrap 已设置并正常工作,但是,当“dob”输入获得和失去焦点而不进行日期选择时,它会清除预先填充的值。

但是,如果通过 datepicker 选择了日期,然后输入获得并失去焦点,则不会发生这种情况。

如果有人单击,如何将预填充的值保留在字段中?

编辑:第一次选择日期时,它会清除预填充的值,但不会插入所选日期,直到您第二次选择日期。

更新:工作代码更新!

4

7 回答 7

49

将强制解析值设置为 false: forceParse: false

    $(".applyDatepicker").datepicker({
            forceParse: false
    });
于 2015-02-27T11:00:51.740 回答
2

如果没有更多示例,无法确定,但问题可能是$this->swimmers->dob您提供给输入的字符串未被 bootstrap-datepicker 识别为日期格式。data-date-format您可以通过将属性添加到输入来定义它使用的日期格式。

例如,如果您使用的是 MySQL 格式的日期或 PHP 的 DateTime 对象,$date->format('Y-m-d')您可以使用:

<div id="datepicker" class="input-group date">
    <input type="text" class="form-control" id="dob" name="dob" value="<?php echo $this->swimmers->dob;?>" data-date-format="yy-mm-dd"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
</div>
于 2014-04-26T13:16:44.740 回答
2

我不确定它在 php 中的工作,但对于 mvc,我遇到了同样的问题,如果控件在没有选择日期的情况下获得和失去焦点,Bootstrap 会删除该值。

我发现 Bootstrap 会删除该值,因为它无法识别由

$('#dtControl').val(nextMonth);

我正在使用 bootstrap v3.1.1,以下代码对我有用

$('#dtControl').datepicker('setDate', nextMonth);

填充日期选择器控件。这样,Bootstrap 可以识别日期,并且在控制获得和失去焦点时不会删除它

于 2014-07-03T04:44:56.983 回答
2

当用户两次单击同一日期时,我遇到了类似的问题。该字段将在单击的日期和空白字段之间“切换”。我基本上不希望它在任何阶段都是空的,所以这就是我解决这个问题的方法,部分归功于 Waqas 的回答:

var datepickerContainer = $('#datepicker');

datepickerContainer.datepicker({
    startDate: "01/01/1900",
    endDate: "01/01/2100",
    format: "dd/mm/yyyy",
    autoclose: true,
    todayHighlight: true
}).on('show', function() {
    datepickerContainer.datepicker.currentDate = $('input#dob').val(); //update this instance with the current value
}).on('changeDate', function(event) {
    var newDate = $('input#dob').val();
    if (newDate == '' || newDate == null) { //check if the new value is empty - if it is, then just set it back to the last known date for this instance
        datepickerContainer.datepicker('setDate', datepickerContainer.datepicker.currentDate);
    }
});

通过将最后一个日期值存储在 datepicker 的该实例中,从而使其相对独立,并且不会清除输入。

我知道你解决了这个问题,但我认为这个片段可能会对处于类似情况的其他人派上用场。

于 2014-11-19T12:45:23.420 回答
0

当 jQuery 调用处理程序时,this关键字是对传递事件的元素的引用。此外,非空字符串将评估为true。基于这些事实,只需在事件处理程序中进行检查。请参阅下面的示例代码。

            .find( 'input[name=startDate]' )
                .datepicker( {format: 'dd-mm-yyyy'} )
                .on( 'changeDate', function() {
                    if( this.value ) { 
                        << do something >>
                    }
                });

注意:为了提高上述代码示例的效率和可读性,检查 DOM 属性值,而不是将包装在 jQuery 对象中并在其上调用val() ( $( this ).val() )。这是一个小的改进,但尽可能紧凑/简单是一个好习惯。

于 2015-10-14T08:03:13.923 回答
0

另一种解决方案是在全局级别定义选项:

$('.datepicker').datepicker();
$.fn.datepicker.defaults.format = 'dd/mm/yyyy';
$.fn.datepicker.defaults.startDate = "0";
$.fn.datepicker.defaults.language = "es";
$.fn.datepicker.defaults.autoclose = true;
$.fn.datepicker.defaults.todayHighlight = true;
$.fn.datepicker.defaults.todayBtn = true;
$.fn.datepicker.defaults.weekStart = 1;

现在,当使用更新方法时,日期选择器不会丢失选项。

于 2018-06-13T10:25:03.133 回答
0
$('#dob').datepicker('update', '2011-03-05');

你可以这样使用。尽管对我来说,它只是通过使用.val()函数将值传递给元素来工作。

参考网址。 https://bootstrap-datepicker.readthedocs.io/en/latest/methods.html

于 2020-06-04T12:47:58.893 回答