У меня есть вход 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');">
Работал для меня.
Я создал 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).
Убедитесь, что вы не видите ошибок в Инструментах разработчика.
onchange
событие onchange
если выполняется первое действие. Хотя в Chrome все работает нормально. Моя версия IE не имеет кнопки.
У меня была та же проблема, и после некоторых исследований я понял, что в Mozilla Bugtracker уже есть отчет о неподтвержденной ошибке.
Я использую jQuery, и мое решение состояло в том, чтобы вызвать фокус и размытие после привязки четного
$('#datefield').on('change', someFunction).focus().blur();
потому что ошибка появляется, только если кто-то нажимает кнопку сброса, прежде чем вводить фокус. Путем установки и удаления фокуса на вход пользователь не распознает ничего, и ошибка обходит.
У меня была эта же проблема (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);
});