Как вручную вызвать событие onchange?
У меня возникла проблема с обработкой события изменения значения в текстовом поле даты и времени, которое устанавливается через виджет календаря. Виджет календаря, очевидно, выполняет что-то вроде следующего кода:
document.getElementById('datetimetext').value = date_value;
Мне нужно, чтобы при изменении значения в текстовом поле даты и времени сбрасывались некоторые другие поля на странице. Я добавил обработчик события onchange
для поля datetimetext
, но он не срабатывает. Я предполагаю, что событие onchange
срабатывает только тогда, когда элемент получает фокус и его значение меняется при потере фокуса.
Поэтому я ищу способ вручную вызвать это событие onchange
, поскольку, как мне кажется, оно должно проверить разницу значений в текстовом поле.
Есть идеи?
1 ответ(ов)
Существует несколько способов сделать это. Если обработчик onchange
установлен через свойство element.onchange
и вас не беспокоит объект события или всплытие, самый простой способ — просто вызвать эту функцию:
element.onchange();
Если вам нужно полностью смоделировать реальное событие, или если обработчик задан через HTML-атрибут или с помощью addEventListener
/attachEvent
, вам потребуется немного проверить наличие функций, чтобы правильно сгенерировать событие:
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
} else {
element.fireEvent("onchange");
}
Этот код проверяет, поддерживает ли браузер создание событий, и в зависимости от этого вызывает соответствующий метод для инициирования события изменения.
event.preventDefault() против return false: в чем разница?
Остановить вызов setInterval в JavaScript
Преимущества addEventListener по сравнению с onclick
Как перейти к следующему полю ввода, если текущее поле содержит значение?
Кнопка onclick срабатывает дважды