6

Как вручную вызвать событие onchange?

56

У меня возникла проблема с обработкой события изменения значения в текстовом поле даты и времени, которое устанавливается через виджет календаря. Виджет календаря, очевидно, выполняет что-то вроде следующего кода:

document.getElementById('datetimetext').value = date_value;

Мне нужно, чтобы при изменении значения в текстовом поле даты и времени сбрасывались некоторые другие поля на странице. Я добавил обработчик события onchange для поля datetimetext, но он не срабатывает. Я предполагаю, что событие onchange срабатывает только тогда, когда элемент получает фокус и его значение меняется при потере фокуса.

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

Есть идеи?

1 ответ(ов)

5

Существует несколько способов сделать это. Если обработчик 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");
}

Этот код проверяет, поддерживает ли браузер создание событий, и в зависимости от этого вызывает соответствующий метод для инициирования события изменения.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь