Как вызвать событие при выборе даты ввода, когда значение не изменилось?

Я предварительно выбираю дату <input type='date' /> и хочу, чтобы пользователь все равно выбрал дату. Если выбранная дата совпадает с предварительно выбранным значением, это не вызывает событие change в jQuery.

Также пробовал blur и input, но blur активируется только при потере фокуса элемента, а не при выборе даты. Кажется, что на input тот же результат, что и на change.

Есть идеи, как этого добиться?

Предварительно выбранная дата — это предлагаемая дата, которую можно выбрать или можно выбрать другую дату.

<input id = "my-date" type = "date" value = "2024-07-20" />

// ..

$( '#container' ).on( 'change', '#my-date', function()
{
    console.info( 'selected date: ' + $( this ).val() );
});

Попробуйте мероприятие input.

Barmar 18.07.2024 18:14

@Barmar событие input также запускается только при изменении значения

Z0q 19.07.2024 10:24

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

Barmar 19.07.2024 14:32

Было бы неплохо иметь некоторый код, чтобы мы могли отлаживать. Но лучший способ сделать это из того, что вы указали, — это выбрать дату, которую пользователю не разрешено выбирать. Таким образом, ваша дата будет бессмысленной датой, которую пользователю не должно быть разрешено выбирать.

Dr. 20.07.2024 18:52

@Доктор. Обновленный вопрос

Z0q 20.07.2024 19:19

«...ввод, но он активируется только при потере фокуса элемента, а не при выборе даты». Никакого события «ввода» не происходит, когда пользователь вводит <input>. Более того, если дата по умолчанию является допустимым значением, почему важно отличать ее от всех других значений? Кроме того, почему сохранение фокуса на дате по умолчанию является проблемой, когда все остальные даты обрабатываются, когда <input> не сфокусирован?

zer00ne 21.07.2024 13:52

Чего вы пытаетесь достичь? Возможно, есть более элегантное решение.

Yinci 22.07.2024 08:34
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
7
108
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вместо использования события изменения вам следует попытаться определить, совпадает ли новое значение даты со старым значением.

var old_value = "";

$("#dateinput").val("2024-07-20");

function check(){
  if (old_value != $("#dateinput").val()){
        alert("Value changed"); // Change this to your code
    old_value = $("#dateinput").val()
    }
    setTimeout(check, 10);
}

setTimeout(check, 10);
<!DOCTYPE html>
<html>

  <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

  <body>

    <input type = "date" id = "dateinput" value = ""><br><br>
    <input type = "submit" value = "Submit">

  </body>

</html>

Спасибо за предложение, хорошая находка! Как вы думаете, было бы эффективно, если бы этот интервал составлял 10 мс?

Z0q 20.07.2024 20:26

«попробуйте определить, совпадает ли новое значение даты со старым значением». Вы этого не делаете. Вы только что заново изобрели событие input, но все еще не делаете то, что хочет ОП.

gre_gor 21.07.2024 12:12

Насколько мне известно, невозможно получить событие выбора во встроенном вводе даты.

Вам нужно использовать библиотеку выбора даты.

Например виджет Datepicker jQuery-UI, который имеет событие выбора.

$("#datepicker").datepicker({
  dateFormat: "yy-mm-dd",
  onSelect(date) {
    console.info(date);
  },
});
<link rel = "stylesheet" href = "https://code.jquery.com/ui/1.13.3/themes/base/jquery-ui.css">
<script src = "https://code.jquery.com/jquery-3.7.1.js"></script>
<script src = "https://code.jquery.com/ui/1.13.3/jquery-ui.js"></script>

<input type = "text" id = "datepicker" value = "2024-07-20">
Ответ принят как подходящий

Я предлагаю решение, установив значение null при выборе даты:

Рабочий фрагмент:

var input = document.getElementById('mydate');

input.onclick = function () {
  this.value = null;
};
  
input.onchange = function () {
  console.info(this.value);
};
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<input type = "date" id = "mydate" value = "2024-07-24">

Хорошая находка! Я попробую это!

Z0q 24.07.2024 16:22

Решено! Спасибо!!

Z0q 24.07.2024 16:52

@Z0q Я очень рад помочь тебе.

Death-is-the-real-truth 30.07.2024 07:20

Другие вопросы по теме