Jak mogę wywołać zdarzenie onchange ręcznie? [duplikat]

To pytanie ma już odpowiedź tutaj:

Ustawiam wartość pola tekstowego Data-Czas za pomocą widżetu kalendarza. Oczywiście widżet kalendarza robi coś takiego:

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

What I want is : Przy zmianie wartości w polu tekstowym data-czas muszę zresetować kilka innych pól w strona. Dodałem detektor zdarzeń onchange do pola datetimetext, który nie jest wyzwalany, ponieważ domyślam się, że {[1] } jest wyzwalany tylko wtedy, gdy element otrzymuje fokus i jego wartość jest zmieniana po utracie fokusu.

Dlatego szukam sposobu na ręczne wywołanie tego zdarzenia onchange (co chyba powinno zająć się sprawdzaniem różnicy wartości w polu tekstowym).

Jakieś pomysły ?
Author: Xaqron, 2010-05-18

3 answers

Możesz to zrobić na kilka sposobów. Jeśli onchange listener jest funkcją ustawioną za pomocą właściwości element.onchange i nie przejmujesz się obiektem event lub bulgotaniem/propagacją, najprostszą metodą jest wywołanie tej funkcji:

element.onchange();

Jeśli potrzebujesz, aby symulować prawdziwe zdarzenie w całości, lub jeśli ustawisz Zdarzenie za pomocą atrybutu html lub addEventListener/attachEvent, aby poprawnie wystrzelić Zdarzenie, musisz wykonać detekcję funkcji:

if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    element.dispatchEvent(evt);
}
else
    element.fireEvent("onchange");
 371
Author: Andy E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 14:20:04

MDN sugeruje, że jest dużo czystszy sposób na to w nowoczesnych przeglądarkach:

// Assuming we're listening for e.g. a 'change' event on `element`

// Create a new 'change' event
var event = new Event('change');

// Dispatch it.
element.dispatchEvent(event);
 224
Author: Milan Iliev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 19:59:10

Dla osób korzystających z jQuery jest wygodna metoda: http://api.jquery.com/change/

 14
Author: Jacob Mouka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-14 19:31:58