onchange не запускается, когда дата ввода типа = «date» очищается как первое действие

1

У меня есть вход type="date" который onchange запускает некоторые JS. Моя проблема в том, что если вы хотите очистить дату с помощью "кросс-кнопки" справа от входного тега, она не будет onchange событие onchange, если вы ранее не изменили значение. Мне это кажется странным. Мой вопрос: могу ли я запустить JS, когда мое первое действие нажимает "крестик", который удаляет дату?

Я использую Firefox 58.0.1

function myFunction(IdTag) {
var x = document.getElementById(IdTag).value;
	alert('The new value is: '+x);
}
<input type="date" id="MyID" value="2018-02-06" onchange="myFunction('MyID');">
  • 2
    Работает во фрагменте кода?
  • 0
    Та же проблема во фрагменте кода. Я проверял. Firefox: проблема, о которой сообщается в вопросе, Chrome: нет проблем, IE: нет даты удаления как FF и Chrome.
Показать ещё 2 комментария
Теги:
onchange

3 ответа

1

Работал для меня.

Я создал html файл с этим контентом:

<html>
  <head></head>
  <body>
    <input type="date" id="MyID" value="2018-02-06" onchange="myFunction('MyID');">
    <script>
      function myFunction(IdTag) {
        var x = document.getElementById(IdTag).value;
        alert('The new value is: '+x);
      }
    </script>
  </body>
</html>

И событие выстрелило, а также очистило дату (которая была установлена на MM/DD/YYYY).

Убедитесь, что вы не видите ошибок в Инструментах разработчика.

  • 1
    В Firefox поле ввода показывает дату и кнопку (внутри ввода справа) для очистки ввода. Эта кнопка не onchange событие onchange если выполняется первое действие. Хотя в Chrome все работает нормально. Моя версия IE не имеет кнопки.
0

У меня была та же проблема, и после некоторых исследований я понял, что в Mozilla Bugtracker уже есть отчет о неподтвержденной ошибке.

Я использую jQuery, и мое решение состояло в том, чтобы вызвать фокус и размытие после привязки четного

$('#datefield').on('change', someFunction).focus().blur();

потому что ошибка появляется, только если кто-то нажимает кнопку сброса, прежде чем вводить фокус. Путем установки и удаления фокуса на вход пользователь не распознает ничего, и ошибка обходит.

0

У меня была эта же проблема (FF 64.0.1 на Linux), и я решил ее, используя событие "mousedown".

По сути, когда событие mousedown запускает таймер, который будет вручную запускать onchange на вашем вводе даты через определенное время, я обнаружил, что для моего варианта использования было достаточно 500 мс.

Я использую jQuery и заставил его работать, процесс должен быть довольно схожим для родной JS:

$('input[name="start_date"]').on('mousedown',function() {
    var $this = $(this);
    setTimeout(function(){ $($this).trigger('change'); }, 500);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню