Обнаружить переход на выбранную дату с помощью bootstrap-datepicker
У меня есть элемент ввода с прикрепленным указателем даты, созданный с помощью bootstrap-datepicker.
<div class="well">
<div class="input-append date" id="dp3" data-date="2012-01-02" data-date-format="yyyy-mm-dd">
<input type="text" id="date-daily">
<span class="add-on"><i class="icon-th"></i></span>
</div>
</div>
<script language="JavaScript" type="text/javascript">
$(document).ready(function() {
$('#dp3').datepicker();
$('#date-daily').val('0000-00-00');
$('#date-daily').change(function () {
console.log($('#date-daily').val());
});
});
</script>
Когда пользователь изменяет дату, печатая непосредственно в элементе ввода, я могу получить значение с помощью события onChange элемента ввода, как показано выше. Но когда пользователь изменяет дату с даты выбора (то есть, нажав на дату в календаре), обработчик onChange не вызывается.
Как я могу обнаружить изменения в выбранной дате, сделанные с помощью средства выбора даты, а не путем ввода в элемент ввода?
Ответы
Ответ 1
Все остальные ответы относятся к jQuery UI datepicker
, но вопрос касается bootstrap-datepicker
.
Вы можете использовать событие on changeDate
, чтобы вызвать событие изменения на связанном входе, а затем обработать оба способа изменения даты из обработчика onChange
:
ChangeDate
Выполняется при изменении даты.
Пример:
$('#dp3').datepicker().on('changeDate', function (ev) {
$('#date-daily').change();
});
$('#date-daily').val('0000-00-00');
$('#date-daily').change(function () {
console.log($('#date-daily').val());
});
Вот рабочая скрипка: http://jsfiddle.net/IrvinDominin/frjhgpn8/
Ответ 2
Попробуйте следующее:
$("#dp3").on("dp.change", function(e) {
alert('hey');
});
Ответ 3
$(function() {
$('input[name="datetimepicker"]').datetimepicker({
defaultDate: new Date()
}).on('dp.change',function(event){
$('#newDateSpan').html("New Date: " + event.date.format('lll'));
$('#oldDateSpan').html("Old Date: " + event.oldDate.format('lll'));
});
});
<link href="http://cdn.rawgit.com/Eonasdan/bootstrap-datetimepicker/e8bddc60e73c1ec2475f827be36e1957af72e2ea/build/css/bootstrap-datetimepicker.css" rel="stylesheet"/>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
<script src="http://cdn.rawgit.com/Eonasdan/bootstrap-datetimepicker/e8bddc60e73c1ec2475f827be36e1957af72e2ea/src/js/bootstrap-datetimepicker.js"></script>
<div class="container">
<div class="col-xs-12">
<input name="datetimepicker" />
<p><span id="newDateSpan"></span><br><span id="oldDateSpan"></span></p>
</div>
</div>
Ответ 4
Вот мой код для этого:
$('#date-daily').datepicker().on('changeDate', function(e) {
//$('#other-input').val(e.format(0,"dd/mm/yyyy"));
//alert(e.date);
//alert(e.format(0,"dd/mm/yyyy"));
//console.log(e.date);
});
Просто раскомментируйте тот, который вы предпочитаете.
Первый вариант изменяет значение другого элемента ввода.
Второй предупреждает дату с форматом datepicker по умолчанию.
Третий предупреждает дату с вашим собственным пользовательским форматом.
Последняя опция выводит в журнал (дата даты по умолчанию).
Это ваш выбор использовать e.date, e.dates(для ввода нескольких данных) или e.format(...).
здесь дополнительная информация
Ответ 5
$(document).ready(function(){
$("#dateFrom").datepicker({
todayBtn: 1,
autoclose: true,
}).on('changeDate', function (selected) {
var minDate = new Date(selected.date.valueOf());
$('#dateTo').datepicker('setStartDate', minDate);
});
$("#dateTo").datepicker({
todayBtn: 1,
autoclose: true,}) ;
});
Ответ 6
На основе примера Ирвина Доминина я создал 2 примера, поддерживающих вставку, и нажал Enter.
Это работает в Chrome:
http://jsfiddle.net/lhernand/0a8woLev/
$(document).ready(function() {
$('#date-daily').datepicker({
format: 'dd/mm/yyyy',
assumeNearbyYear: true,
autoclose: true,
orientation: 'bottom right',
todayHighlight: true,
keyboardNavigation: false
})
/* On 'paste' -> loses focus, hide calendar and trigger 'change' */
.on('paste', function(e) {
$(this).blur();
$('#date-daily').datepicker('hide');
})
/* On 'enter' keypress -> loses focus and trigger 'change' */
.on('keydown', function(e) {
if (e.which === 13) {
console.log('enter');
$(this).blur();
}
})
.change(function(e) {
console.log('change');
$('#stdout').append($('#date-daily').val() + ' change\n');
});
});
Но не в IE, поэтому я создал еще один пример для IE11:
https://jsbin.com/timarum/14/edit?html,js,console,output
$(document).ready(function() {
$('#date-daily').datepicker({
format: 'dd/mm/yyyy',
assumeNearbyYear: true,
autoclose: true,
orientation: 'bottom right',
todayHighlight: true,
keyboardNavigation: false
})
// OnEnter -> lose focus
.on('keydown', function(e) {
if (e.which === 13){
$(this).blur();
}
})
// onPaste -> hide and lose focus
.on('keyup', function(e) {
if (e.which === 86){
$(this).blur();
$(this).datepicker('hide');
}
})
.change(function(e) {
$('#stdout').append($('#date-daily').val() + ' change\n');
});
});
Если последний пример все еще не работает в IE11, попробуйте разделить настройку:
// DatePicker setup
$('.datepicker').datepicker({
format: 'dd/mm/yyyy',
assumeNearbyYear: true, /* manually-entered dates with two-digit years, such as '5/1/15', will be parsed as '2015', not '15' */
autoclose: true, /* close the datepicker immediately when a date is selected */
orientation: 'bottom rigth',
todayHighlight: true, /* today appears with a blue box */
keyboardNavigation: false /* select date only onClick. when true, is too difficult free typing */
});
И обработчики событий: (обратите внимание, я не использую $('.datepicker').datepicker({
)
// Smoker DataPicker behaviour
$('#inputStoppedDate')
// OnEnter -> lose focus
.on('keydown', function (e) {
if (e.which === 13){
$(this).blur();
}
})
// onPaste -> hide and lose focus
.on('keyup', function (e) {
if (e.which === 86){
$(this).blur();
$(this).datepicker('hide');
}
})
.change(function (e) {
// do saomething
});
Ответ 7
Вы можете использовать событие onSelect
$("#date-daily").datepicker({
onSelect: function(dateText) {
alert($('#dp3').val());
}
});
Он вызывается, когда выбран параметр datepicker. Функция получает выбранную дату как текст и экземпляр datepicker в качестве параметров. это относится к соответствующему полю ввода.
СМОТРИТЕ ЗДЕСЬ