Jak mogę wywołać zdarzenie onchange ręcznie? [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak wywołać zdarzenie w JavaScript? 16 odpowiedzi
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).
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");
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);
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/
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