Подтвердить что ты не робот

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(){};

Но это не закрывает сборщик дат, надеясь, что это простое решение. ТНХ

4b9b3361

Ответ 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;
    }
  }
}