it-swarm.com.ru

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

У меня есть DatePicker

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

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

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

12
Konstantin Vahrushev

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

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

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

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

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

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

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

6
brso05

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

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

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

Если вы используете загрузчик даты начальной загрузки, вы можете сделать следующее:

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

Для более подробной информации: Bootstrap Datepicker события

0
Mivaweb

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

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

0
athene

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

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

myfunc(".inp");
0
Konstantin Vahrushev