【问题标题】:Use "beforeShowDay" with Bootstrap-datepicker在 Bootstrap-datepicker 中使用“beforeShowDay”
【发布时间】:2018-02-17 15:27:12
【问题描述】:

我使用 Bootstrap 3。

在 Bootstrap-datepicker 中,只有当我的 CMS TYPO3 v7 有一些关于这个日期的新闻时,我才必须启用日期。

我成功地将日期从 TYPO3 viewhelper 获取到数据属性中:

<input id="agenda-date-selector-datepicker-footer" class="agenda-date-selector-datepicker" value="{f:format.date(date:\'{weekDate}\',format:\'d-m-Y\')}" data-dates='{enableDates -> ul:Datepicker()}'>

(不要关心“价值观”,这里不重要)。

在我的 JS 中,我进入了我的“真实”回报。 (alert("true"); 显示 10 次,但我有 13 个日期...奇怪... 并且没有日期被禁用到日期选择器中。

我调整了这个工作模型来制作代码http://jsfiddle.net/vCJ2u/198/,但是这个模型使用jQuery UI。

这是我的代码:

$(function(){
	
	if($('.section-agenda-date-selector').length){
		availableDates = $('#agenda-date-selector-datepicker-footer').data('dates');
		alert(availableDates);
		$("#agenda-date-selector-datepicker-footer").datepicker({
			maxViewMode: 2,
			language: "fr",
			autoclose: true,
			todayHighlight: true,
			//startDate: '+1d',
			//weekStart: 1,
			format: 'yyyy-mm-dd',
			beforeShowDay: function(dt){
				console.log([available(dt), "" ]);
				return [available(dt), "" ];
			}
		});
	
		initAgendaListe();
	}

	
});

function available(date) {
	dmy = ( '0' + date.getDate() ).slice( -2 ) + "-" + ( '0' + (date.getMonth()+1) ).slice( -2 ) + "-" + date.getFullYear();
	
	if ($.inArray(dmy.toString(), availableDates) != -1){
// 		alert("true");
		return {
			enabled : true
		};
	} else {
		return {
			enabled : false
		};
	}

}

function initAgendaListe(){			
	// au click sur un élément du datepicker
	$('.agenda-date-selector-datepicker').on('change', function(){
		window.location.href = '/index.php?id=19&eventsbyweek='+$(this).val();
	});
};
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.7.1/js/bootstrap-datepicker.min.js"></script>

<div class="section section-grey section-agenda-date-selector">
...
</div>

<div class="agenda-datepicker datepicker-wrapper">
		<div class="input-datepicker-hidden">
			<input id="agenda-date-selector-datepicker-footer" class="agenda-date-selector-datepicker" value="" data-dates='["15-06-2017","20-06-2017","29-06-2017","29-08-2017","11-09-2017","15-09-2017","17-09-2017","18-09-2017","27-09-2017","28-09-2017","29-09-2017","30-09-2017","31-10-2017"]'>
		</div>
		<label class="btn btn-default" for="agenda-date-selector-datepicker-footer">
		<i class="icon icon-left icon-agenda"></i>
		Choisir une date
		</label>
		
</div>

请给个主意?欢迎任何帮助! :) 提前致谢!

【问题讨论】:

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


    【解决方案1】:

    希望这会有所帮助!

    使用 bootstrap beforeShowDay 选项启用日期。

    $(function() {
    var datesEnabled = ['2017-9-10', '2017-9-15', '2017-9-25'];
    $('#datepicker').datepicker({
    format: 'yyyy-mm-dd',
    beforeShowDay: function (date) {
      var allDates = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
      if(datesEnabled.indexOf(allDates) != -1)
      return true;
      else
      return false;
       }
    });
    });
    td.day.disabled {
    opacity: 0.2;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/js/bootstrap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.7.1/js/bootstrap-datepicker.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <input id="datepicker">

    【讨论】:

    • 谢谢,但我不需要禁用但启用了一些日期...因此默认禁用所有日期并仅启用我的数组中的日期。所以bootstrap-datepicker.readthedocs.io/en/latest/… 方法似乎存在...?
    • 非常感谢 Amal :) 它适用于您更新的示例!但是:如果我用数据属性返回的数组替换您的数组:var datesEnabled = $('#agenda-date-selector-datepicker-footer').data('dates'); 它不起作用:( 每个日期都被禁用...但alert(datesEnabled); 显示与硬编码数组相同的输出...这可以是格式问题?!
    • 非常感谢 Amal :) 它适用于您更新的示例!但是:如果我用数据属性返回的数组替换您的数组:var datesEnabled = $('#agenda-date-selector-datepicker-footer').data('dates'); 它不起作用:( 每个日期都被禁用...但是alert(datesEnabled); 显示的输出与您的硬编码数组相同...也许是问题是因为数据属性...我的数组不是数组而是字符串逗号分隔...alert(datesEnabled);显示2017-09-15,2017-09-17,2017-09-18not['2017-09-15','2017-09-17','2017-09-18']...?
    • 使用 Firebug,日期属性的值很奇怪:data-dates="[" 2017-06-15","2017-06-20","2017-06-29","2017-08-29","2017-09-11","2017-09-15","2017-09-17","2017-09-18","2017-09-27","2017-09-28","2017-09-29","2017-09-30","2017-10-31"]"="" 我尝试使用“JSON_HEX_QUOT”常量修改我的 php 返回,但没有任何成功...return json_encode($enableDates, JSON_HEX_QUOT); 任何想法?
    • 非常感谢兄弟。你救了我,非常好的解决方案。
    【解决方案2】:

    好的!现在它正在工作! 这是我的代码:https://jsfiddle.net/scanx/per1syfr/2/

    $(function(){
        
        if($('.section-agenda-date-selector').length){
    //         var datesEnabled = $('#agenda-date-selector-datepicker-footer').data('dates');
            var datesEnabled = ['2017-09-21','2017-09-15','2017-09-25'];
            alert(datesEnabled);
    
            $("#agenda-date-selector-datepicker-footer").datepicker({
                maxViewMode: 2,
                language: "fr",
                autoclose: true,
                todayHighlight: true,
                weekStart: 1,
                format: 'yyyy-mm-dd',
                beforeShowDay: function (date) {
                    var allDates = date.getFullYear() + "-" + ( '0' + (date.getMonth()+1) ).slice( -2 ) + "-" + ( '0' + date.getDate() ).slice( -2 );
                    if(datesEnabled.indexOf(allDates) != -1)
            {
                alert(allDates + " : dispo");
                        return true;
                    }
            else
            {
                alert(allDates + " : pas dispo")
                        return false;
            }
                }
    
            });
        
            initAgendaListe();
        }    
    });

    感谢Amal,他对我的帮助很大! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2020-09-03
      • 2013-01-07
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多