Bootstrap Datetimepicker - 禁用几十年视图模式
Bootstrap Datetimepicker - Disable decades view mode
当用户多次点击视图 header 时,预期的行为是:天 -> 月 -> 年 -> 十年。
我需要禁用几十年视图(附截图)。
这样做用户无法进一步 'year' 查看模式。
这里是 workaround,感谢 RomeroMsk 提供的。
CSS:
.datepicker-years .picker-switch {
cursor: default !important;
background: inherit !important;
}
JS:
$('#datetimepicker1').datetimepicker({
// your datetimepicker options go here, f.i.:
inline: true,
sideBySide: false,
format : "DD/MMM/YYYY",
maxDate : moment()
}).on('dp.show dp.update', function () {
$(".datepicker-years .picker-switch").removeAttr('title')
//.css('cursor', 'default') <-- this is not needed if the CSS above is used
//.css('background', 'inherit') <-- this is not needed if the CSS above is used
.on('click', function (e) {
e.stopPropagation();
});
});
您也可以通过更改 bootstrap-datetimepicker.js 来实现,这是最简单的方法。您所要做的就是在编辑器中打开 bootstrap-datetimepicker.js -
找到并注释行 -
yearsViewHeader.eq(1).attr('title', options.tooltips.selectDecade);
在 "yearsView.find('.disabled').removeClass('disabled'); " 行下方添加此行
yearsViewHeader.eq(1).addClass('disabled');
您可以在此 link
找到更详细的步骤
在我自己尝试解决这个问题多年之后,我终于破解了它。
我已经修改了@Sarpe 的答案,以便它在加载时禁用几十年按钮。
Sarpe 的解决方法要求用户在禁用前单击一个日期。
$('#datetimepicker1').datetimepicker({
inline: true,
sideBySide: false,
format: 'YYYY-MM-DD',
maxDate: moment()
});
$(".datepicker-years .picker-switch").addClass('disable').on('click', function(e) {
e.stopPropagation();
});
.bootstrap-datetimepicker-widget .datepicker-years thead .picker-switch {
cursor: default !important;
background: inherit !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/eonasdan-bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet"/>
<div id="datetimepicker1"></div>
<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.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/eonasdan-bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
这是最简单的解决方案。
.datepicker-dropdown .datepicker-years .datepicker-switch, .datepicker-dropdown .datepicker-months .datepicker-switch {
pointer-events: none;
}
这对我有用 Bootstrap 日期选择器
$('#datetimepicker1').datepicker({
format: 'DD-MM-YYYY'
}).on('show', () => {
const decadesDiv = document.querySelector(".datepicker-decades");
if (decadesDiv) {
decadesDiv.firstElementChild.firstElementChild.childNodes.forEach((tr,idx)
=> {
if (idx === 0)
tr.style.visibility = "hidden";
else {
tr.children[1].addEventListener('click', (e) => {
e.stopPropagation() });
//tr.children[1].style.visibility = "hidden"; //optional CSS
}
});
}
});
嗯,对我来说,MaxViewMode 很有魅力。
默认情况下,它设置为 4,但我们可以根据需要更改它。符合我们的喜好
天(0) -> 月(1) -> 年(2) -> 十年(3) -> 世纪(4)
MaxViewMode: 2 - 限制用户进入年视图模式
我的代码限制用户只能使用到年
$('#Datepicker').datepicker('destroy').datepicker({
todayHighlight: true,
endDate: endDate,
maxViewMode: 2
这是文档
https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#maxviewmode
当用户多次点击视图 header 时,预期的行为是:天 -> 月 -> 年 -> 十年。 我需要禁用几十年视图(附截图)。 这样做用户无法进一步 'year' 查看模式。
这里是 workaround,感谢 RomeroMsk 提供的。
CSS:
.datepicker-years .picker-switch {
cursor: default !important;
background: inherit !important;
}
JS:
$('#datetimepicker1').datetimepicker({
// your datetimepicker options go here, f.i.:
inline: true,
sideBySide: false,
format : "DD/MMM/YYYY",
maxDate : moment()
}).on('dp.show dp.update', function () {
$(".datepicker-years .picker-switch").removeAttr('title')
//.css('cursor', 'default') <-- this is not needed if the CSS above is used
//.css('background', 'inherit') <-- this is not needed if the CSS above is used
.on('click', function (e) {
e.stopPropagation();
});
});
您也可以通过更改 bootstrap-datetimepicker.js 来实现,这是最简单的方法。您所要做的就是在编辑器中打开 bootstrap-datetimepicker.js -
找到并注释行 -
yearsViewHeader.eq(1).attr('title', options.tooltips.selectDecade);
在 "yearsView.find('.disabled').removeClass('disabled'); " 行下方添加此行
yearsViewHeader.eq(1).addClass('disabled');
您可以在此 link
找到更详细的步骤在我自己尝试解决这个问题多年之后,我终于破解了它。
我已经修改了@Sarpe 的答案,以便它在加载时禁用几十年按钮。 Sarpe 的解决方法要求用户在禁用前单击一个日期。
$('#datetimepicker1').datetimepicker({
inline: true,
sideBySide: false,
format: 'YYYY-MM-DD',
maxDate: moment()
});
$(".datepicker-years .picker-switch").addClass('disable').on('click', function(e) {
e.stopPropagation();
});
.bootstrap-datetimepicker-widget .datepicker-years thead .picker-switch {
cursor: default !important;
background: inherit !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/eonasdan-bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet"/>
<div id="datetimepicker1"></div>
<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.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/eonasdan-bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
这是最简单的解决方案。
.datepicker-dropdown .datepicker-years .datepicker-switch, .datepicker-dropdown .datepicker-months .datepicker-switch {
pointer-events: none;
}
这对我有用 Bootstrap 日期选择器
$('#datetimepicker1').datepicker({
format: 'DD-MM-YYYY'
}).on('show', () => {
const decadesDiv = document.querySelector(".datepicker-decades");
if (decadesDiv) {
decadesDiv.firstElementChild.firstElementChild.childNodes.forEach((tr,idx)
=> {
if (idx === 0)
tr.style.visibility = "hidden";
else {
tr.children[1].addEventListener('click', (e) => {
e.stopPropagation() });
//tr.children[1].style.visibility = "hidden"; //optional CSS
}
});
}
});
嗯,对我来说,MaxViewMode 很有魅力。 默认情况下,它设置为 4,但我们可以根据需要更改它。符合我们的喜好
天(0) -> 月(1) -> 年(2) -> 十年(3) -> 世纪(4)
MaxViewMode: 2 - 限制用户进入年视图模式
我的代码限制用户只能使用到年
$('#Datepicker').datepicker('destroy').datepicker({
todayHighlight: true,
endDate: endDate,
maxViewMode: 2
这是文档 https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#maxviewmode