jQuery.val() возвращает значение только для второго события с помощью datepicker

#javascript #jquery #jquery-ui

#javascript #jquery #jquery-пользовательский интерфейс

Вопрос:

Я работаю с (устаревшим) проектом, используя datepicker jQuery UI. Мне нужно проверить, что дата, введенная в элемент, составляет минимум 24 часа от текущей даты. Я беру значение элемента datepicker в blur для его проверки. Проблема в том, что попытка получить значение входных данных, к которым применен datepicker, ведет себя непоследовательно. .val() возвращает значение только для второго события размытия, а затем возвращает значение события размытия, предшествующего этому. Сводит меня с ума.

Разметка:

 <form action="" method="GET" novalidate="novalidate" class="form">
    <fieldset>
        <legend>Entry Date/Time</legend>

        <label for="ad" class="screen-reader-text">Entry Date</label>
        <span class="fa fa-calendar"></span>
        <input type="text" id="entry-date" name="ad" placeholder="March 4, 2019" autocomplete="off">
    </fieldset>

    <div class="submit-wrapper">
        <input type="submit" class="parking-submit" value="Submit">
    </div><!--ends submit-wrapper-->
</form>
  

JS:

   jQuery(document).ready(function($){
    $('.form input[type=text]').datepicker({
        minDate: -0,
        nextText: '>>',
        prevText: '<<',
        dateFormat: 'M dd, yy'
    });

  $('#entry-date').blur(function(){
       var now = new Date();
       console.log(now);
       var tomorrow = new Date(now.getTime()   86400000); //1 day in ms
       console.log(tomorrow);
       var dateGiven = $('#entry-date').val();
       console.log('Set value is'   dateGiven);
  });
});
  

Вот ручка, показывающая проблему.

Любая помощь приветствуется.

Комментарии:

1. Это потому, что заполнитель не является значением. Кстати, Date.now() , не будучи new экземпляром, даст вам миллисекунды с 1 января 1970 года.

2. вместо $('#entry-date').val() использования этого контекста, подобного $(this).val()

3. @guradio разве это не одно и то же в прослушивателе событий jQuery?

4. это текущая цель, хотя они одинаковы, они будут отличаться. если это не был идентификатор, поскольку идентификатор уникален

5. Почему бы вам просто не отключить все даты, которые начинаются через 24 часа с now-date?

Ответ №1:

Вместо размытия используйте изменение.

    $('#entry-date').change(function(){
       var now = new Date();
       console.log(now);
       var tomorrow = new Date(now.getTime()   86400000); //1 day in ms
       console.log(tomorrow);
       var dateGiven = $('#entry-date').val();
       console.log('Set value is'   dateGiven);
  });
  

Комментарии:

1. Этот ответ правильный. Проблема в том, что событие размытия происходит до того, как значение было обновлено. Это видно из того, что предыдущее значение регистрируется, и ни одно значение не регистрируется в первый раз.

2. Также не уверен, почему оно было отклонено. Определенно работает.