Событие onchange не срабатывает, когда изменения происходят из другой функции - PullRequest
11 голосов
/ 14 августа 2011

У меня есть входной текст, который получает его значение из функции javascript (таймер с обратным отсчетом).

Я хочу вызвать событие, когда входной текст равен 0, поэтому я использую change eventListener.

к сожалению, это не вызывает событие, когда изменение происходит из функции javascript.

Как заставить событие изменения работать, даже если изменение приходит из javascript ине от пользователя?

Спасибо за любую помощь

Ответы [ 4 ]

15 голосов
/ 14 августа 2011

Из тонкой инструкции :

изменение
Событие изменения происходит, когда элемент управления теряет фокус ввода и его значение было изменено с момента получения фокуса. Это событие действительно для INPUT, SELECT и TEXTAREA. элемент.

Когда вы изменяете значение ввода текста через код, событие изменения не будет запущено, потому что нет изменения фокуса. Вы можете вызвать событие самостоятельно, хотя с помощью createEvent и dispatchEvent, например:

el = document.getElementById('x');
ev = document.createEvent('Event');
ev.initEvent('change', true, false);
el.dispatchEvent(ev);

И живая версия: http://jsfiddle.net/ambiguous/nH8CH/

3 голосов
/ 14 августа 2011

В функции, которая изменяет значение, вручную запустите событие change.

var e = document.createEvent('HTMLEvents');
e.initEvent('change', false, false);
some_input_element.dispatchEvent(e);
1 голос
/ 06 августа 2018

сейчас 2018 и кажется, что initEvent () устарела: https://developer.mozilla.org/en-US/docs/Web/API/Event/initEvent

Я думаю, вы можете вызвать событие в одну строку: element.dispatchEvent (new Event ('change'));

1 голос
/ 07 октября 2013

Более многоразовый вариант:

function simulate_event(eventName, element) {
    // You could set this into the prototype as a method.
    var event;

    if (document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent(eventName, true, true);
    } else {
        event = document.createEventObject();
        event.eventType = eventName;
    };

    event.eventName = eventName;

    if (document.createEvent) {
        element.dispatchEvent(event);
    } else {
        element.fireEvent("on" + event.eventName, event);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...