Событие события изменения события дампинга JQuery и событие изменения по умолчанию ввода

У меня есть datepicker

  <input type='text' class='inp'>  
<script>
   $('.inp').datepicker();

  $(".inp").on("change",function (){ 
   console.log('inp changed');
  });
</script>

Когда я сначала меняю ".inp" вручную, введите там значение, затем сразу же нажимаю на открываемый календарь datepicker. Я получаю двух слушателей событий "change". Сначала из ручного изменения, затем с изменения даты. Как я могу избежать этого?

Ответ 1

Задайте свой ввод readOnly, это поможет вам изменить значение поля только с помощью значка.

<input type='text' class='inp' readOnly />

затем используйте onSelect для получения выбранной даты, как показано ниже:

$(function() {
    $(".inp").datepicker({
        onSelect: function(dateText, inst) {
            // alert(dateText);
        }
    });
});

Ответ 2

Попробуйте использовать функцию onSelect, например:

$(function() {
    $( ".datepicker" ).datepicker({
        onSelect: function() {
        //your code here
    }});

Это будет запущено, когда они выбирают дату из календаря, когда они не печатают.

Ответ 3

Вы можете включить onSelect, чтобы вызвать событие изменения в текстовом поле. Таким образом, редактирование даты через текстовое поле или с помощью выбора даты ведет себя одинаково.

$('.inp').datepicker({
  onSelect: function() {
    return $(this).trigger('change');
  }
);

$(".inp").on("change",function (){ 
   console.log('inp changed');
}

Ответ 4

Если вы используете bootprap datepicker, вы можете сделать следующее:

$('.datepicker').datepicker()
    .on('changeDate', function(e){
        # `e` here contains the extra attributes
});

Подробнее: События Bootprap Datepicker

Ответ 5

Спасибо! Все, но я не мог сделать поле только для чтения, это требование. Поэтому я должен был сам себя осмотреть. Поэтому я отправляю свое окончательное решение. Я развязал 150 мс, а затем снова привязал. Я сделал плагин jquery для этого

function myfunc(that){
        $(that).one('change', function(){
                var that = this;
                setTimeout(function(){myfunc(that);}, 150);
                //some logic
            }
        )
}

myfunc(".inp");

Ответ 6

Спасибо всем, это то, что я использовал,

function myfunction(x,x2){
    var date1 = new Date(x);
    var MyDateString; 
    MyDateString = date1.getFullYear()+ '/' + ('0' + (date1.getMonth()+1)).slice(-2) + '/' + ('0' + date1.getDate()).slice(-2);
    x2.value=  MyDateString;    
 }

x, являющееся значением datepicker, а x2 - объектом datepicker

Ответ 7

Если вы используете сборщик дат jquery, нет необходимости в календарном пожаре. вы можете запустить событие в текстовом поле "textchanged"