Bootstrap Datepicker на смену 3 раза
Привет, я пытался просто получить дату выбора даты загрузки и смог, но, похоже, срабатывает 3 раза. ПРИМЕЧАНИЕ. Это не сборщик дат, но выбор даты загрузки.
С помощью этого выбора даты: https://github.com/eternicode/bootstrap-datepicker, а не старше eyecon.ro.
$(".date-picker").on("change", function(e) {
contents = $(this).val();
id = $(this).attr('id');
console.log("onchange contents: " + contents);
console.log("onchange id: " + id);
});
HTML:
<input id="start_date" type="text" data-date-format="yyyy-mm-dd" class="date-picker form-control" />
Я использовал несколько других параметров, кроме изменения, например
$('.date-picker').datepicker().change(function(){};
Но это не закрывает сборщик дат, надеясь, что это простое решение. ТНХ
Ответы
Ответ 1
он не устраняет проблему, но я использовал datepicker для отправки через пост ajax, поэтому 3 события изменения вызывали у меня проблемы - третье событие всегда терпело неудачу. даже если в документации указано, что используется событие changeDate, мне не кажется, что я должен запустить событие изменения тега ввода 3 раза. значение не меняется 3 раза!
Я написал простую функцию "debounce", чтобы обойти проблему. не устраняет проблему - из-за того, что из методов запускаются несколько событий изменения: setValue (строка 508) _setDate: (строка 1048) и setValue (строка 508) (версия 1.3.0) виджета.
var lastJQueryTS = 0 ;// this is a global variable.
....
// in the change event handler...
var send = true;
if (typeof(event) == 'object'){
if (event.timeStamp - lastJQueryTS < 300){
send = false;
}
lastJQueryTS = event.timeStamp;
}
if (send){
post_values(this);
}
это довольно просто, просто находит jquery 'event' и гарантирует, что значения в окне 300 мс будут проигнорированы. в моем тестировании все это произошло через 30 мсек или около того.
Ответ 2
Вы должны использовать событие changeDate. Например:
var datePicker = $('.date-picker').datePicker().on('changeDate', function(ev) {
//Functionality to be called whenever the date is changed
});
Подробнее об этом событии читайте здесь.
Ответ 3
Как и в предыдущем ответе, но вы должны использовать datepicker, если вы не переименовали функцию:
var datePicker = $('.date-picker').datepicker().on('changeDate', function(ev) {
//Functionality to be called whenever the date is changed
});
Это работает для меня, кроме как в моем случае, я переименовал функцию datepickerBootstrap, чтобы избежать столкновения с JQuery. Тогда это станет следующим:
var datePicker = $('.date-picker').datepickerBootstrap().on('changeDate', function(ev) {
// On change functionality
});
Ответ 4
Я попробовал ответить С# pgee70, и он не работает для меня. Так что это мое решение, надеюсь, его помощь
var send=true;
$('.input-group.date').datepicker({
todayBtn: "linked",
keyboardNavigation: false,
forceParse: false,
language: 'es-ES',
weekStart: 1,
format: 'dd/mm/yyyy',
enableOnReadonly:false,
calendarWeeks: true,
autoclose: true,
todayHighlight:true
}).on("changeDate", function(e) {
if(send){
modificarFechaAplicacionCliente($("#input_filtro_fecha_cliente").val());
send=false;
}
setTimeout(function(){send=true;},200);
});
Это не биткое решение, но оно работает.
Ответ 5
Получить глобальный счетчик переменных и проверить, равно ли равен 0, а затем выполнить вашу функцию.
var count=0;
$( "#Id" ).datepicker({ minDate: 0}).on('change',function (){
if(count==0)
validity();//any function
count=1;
});
validity(){ count=0;}
Ответ 6
Кажется, что при проверке события change
, если изменение было выполнено из фактического взаимодействия с пользователем, событие изменения содержит значение для originalEvent
.
Событие НЕ содержит, если это значение было изменено с помощью JS:
$obj.val('1990-03-07').change()
и то же самое с bootstrap-datepicker
Вот как я его установил:
Общая начальная настройка
// General selector for date inputs
var $obj = $('input[type="date"]');
$obj.datepicker({
// options here, not important for this example
});
Обработать bootstrap-datepicker
конкретные изменения
$obj.datepicker().on('changeDate', function (event) {
handleInputDateAndTimeChange(event);
});
Теперь рассмотрим изменения взаимодействия с пользователем
$('input[type="date"], input[type="time"]').change(function (event) {
// This checks if change was initiated by user input and NOT JS
if(event.originalEvent !== undefined) {
handleInputDateAndTimeChange(event);
}
});
И, наконец, здесь функция handleInputDateAndTimeChange
function handleInputDateAndTimeChange(event) {
var $input = $(event.target);
// Do what you want with $input object here...
}
Ответ 7
бит раздражает..
мой код:
var c=0;var send=false;
$(document).ready(function() {
jQuery( ".ed" ).datepicker({
format: "yyyy-mm-dd",
autoclose:!0
}).on('change',function() {
if(c==2){
c=0;
send=true;
}else{
c++;
send=false;
}
});
});
Ответ 8
Как уже упоминалось, используйте это:
$('#calendar').on("changeDate", function() {
});
Хитрость заключается в использовании changeDate
вместо change
.
Ответ 9
Исправлено найти ваш фиксированный файл datepicker js ЗДЕСЬ
Прочтите описание исправления ЗДЕСЬ
Ответ 10
var pickerFireCount = 0;
function checkSelectedDateIsHollyday(rId) {
pickerFireCount++;
if (pickerFireCount == 3) {
if (!selectedDateIsHolyday(rId)) {
showInfoMessage('The date you selected is a holiday.');
pickerFireCount = 0;
}
}
}