【问题标题】:Update bootstrap 3 datepicker options dynamically?动态更新引导程序 3 日期选择器选项?
【发布时间】:2017-05-30 14:43:00
【问题描述】:

这个日期选择器已经使用其他默认选项创建,但我需要使用以下新选项对其进行更新,但它似乎不起作用:

// new options
var new_options = {
    format: 'dd/mm/yyyy',
    autoclose: true,
    language: 'es'
}

// update values
$("#fecha_periodo").datepicker("update", new_options );

我还想更新其他选项,例如daysOfWeekDisabledviewMode 等。

【问题讨论】:

标签: jquery twitter-bootstrap-3 bootstrap-datepicker


【解决方案1】:

不幸的是,没有 API 可以动态更改选项,所有可用的方法都列在 here 中(您可以使用 setDaysOfWeekDisabled 设置动态禁用星期几)。

您可以使用destroy 方法销毁 datepicker 实例并使用新选项重新构建它。

这里是一个活生生的例子:

$('#datepicker').datepicker();

$('#btnChange').click(function(){
  var new_options = {
    format: 'dd/mm/yyyy',
    autoclose: true,
    language: 'es'
  }
  // Save value
  var value = $('#datepicker').datepicker('getDates');
  // Destroy previous datepicker
  $('#datepicker').datepicker('destroy');
  // Re-int with new options
  $('#datepicker').datepicker(new_options);
  // Set previous value
  $('#datepicker').datepicker('setDates', value);
});
<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/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.es.min.js"></script>

<input type="text" class="form-control" id="datepicker">

<button id="btnChange" class="btn btn-primary">Change option</button>

【讨论】:

  • 本来打算换成datepicker "v4" 但是好像不是官网,不知道大家有没有观察到bootstrap里面有很多"datepickers"和"datetimepickers" “那些让人们感到困惑并且不知道该使用哪一个的网站,我只使用内置的引导程序。感谢您的回答,并将使用它,问候。
  • 很遗憾,bootstrap 本身不包含 datepicker,但是有很多独立的 datepicker 带有 bootstrap 主题。在我看来,最好的一个是 eonasdan 的bootstrap-datetimepicker。它使用 momentjs,它有丰富的 API 并且有据可查。
【解决方案2】:

您可以在https://eonasdan.github.io/bootstrap-datetimepicker/ 找到所有关于新版本(Bootstrap 3 Datepicker v4 Docs)的信息。

let new_options = {
    icons: {
        time: "fa fa-clock-o",
        date: "fa fa-calendar",
        up: "fa fa-chevron-up",
        down: "fa fa-chevron-down",
        previous: 'fa fa-chevron-left',
        next: 'fa fa-chevron-right',
        today: 'fa fa-screenshot',
        clear: 'fa fa-trash',
        close: 'fa fa-remove'
    },
    format: 'DD/MM/YYYY',
    date: new Date()
}

if(condition1){
        new_options.daysOfWeekDisabled = [0,2,3,4,5,6];
        new_options.viewMode = 'years';
        new_options.format = 'MM/YYYY';
    }else(condition2){
        new_options.viewMode = 'years';
        new_options.format = 'YYYY';
    }
    // Destroy previous datepicker
    $('.datetimepicker').data("DateTimePicker").destroy();
    // Re-int with new options
    $('.datetimepicker').datetimepicker(new_options);

对不起,我的英语不好:)

【讨论】:

    【解决方案3】:

    这里我有一个黑客解决方案,可以在我启动引导程序 datepicker 对象后动态更改 datepicker 选项。

    var id = "MyDatepicker"
    var beginDate = new Date();
    var endDate =  new Date(2022, 11, 17, 3, 24, 0);
    
    function myCallBack(date) {
        if ((beginDate <= date) && (date <= endDate)){
            return {classes: 'activeClass'};
        }
        return;
    }
    
    $('#' + id ).datepicker({
        startDate: new Date(),
        language: 'en'
    });
    
    $('#' + id ).datepicker('_process_options', {
        beforeShowDay: function(date) {
            return myCallBack(date);
        }
    }).datepicker('update','')
    

    在这种情况下。我将一个类应用于日期选择器上的一系列日期。

    我使用“非公开”日期选择器方法“_process_options”来更改实习日期选择器方法。

    使用此方法,我可以更改 datepicker 实例的所有选项,因为“_process_options”没有方法验证器。

    由于 dobbleclick 错误,我还使用了“更新”方法:bootstrap datepicker, beforeShowDay works after second click

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2015-02-05
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2020-01-10
      相关资源
      最近更新 更多