Jak programowo wymusić zdarzenie onchange na wejściu?
Próbowałem czegoś takiego:
var code = ele.getAttribute('onchange');
eval(code);
Ale moim ostatecznym celem jest uruchomienie funkcji słuchacza, a to nie działa. Nie wystarczy też zaktualizować atrybut „wartość”.
javascript
Soldarnal
źródło
źródło
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
W jQuery najczęściej używam:
źródło
ugh nie używaj eval do niczego . Cóż, są pewne rzeczy, ale są one niezwykle rzadkie. Raczej zrobiłbyś to:
Poszukaj więcej opcji: http://jehiah.cz/archive/firing-javascript-events-properly
źródło
new Event(...)
idispatchEvent
wydaje się, że jest obecnie właściwym rozwiązaniem.Element.addEventListener
obsługiwałeś zdarzenia. Aby osiągnąć to w nowoczesny sposób, zobacz odpowiedź @ Miscreant.Z jakiegoś powodu ele.onchange () rzuca dla mnie w IE na mojej stronie wyjątek "nie znaleziono metody", więc skończyło się na tym, że użyłem tej funkcji z linku podanego przez Kolten i wywołałem fireEvent (ele, 'zmiana'), co zadziałało :
Stworzyłem jednak stronę testową, która potwierdziła, że połączenie powinno działać:
Edycja: Powodem, dla którego ele.onchange () nie działało, było to, że tak naprawdę nie zadeklarowałem niczego dla zdarzenia onchange. Ale fireEvent nadal działa.
źródło
element.dispatchEvent(new Event('change', true, true))
zamiast tego wszystkiego tajemniczego i przeważnie przestarzałegocreateEvent
i takinitEvent
dalej.To jest najbardziej poprawna odpowiedź dla IE i Chrome:
źródło
Zaczerpnięte z dołu QUnit
Możesz oczywiście zamienić zawartość $ .browser na własne metody wykrywania przeglądarki, aby uczynić ją niezależną od jQuery.
Aby skorzystać z tej funkcji:
Zasadniczo spowoduje to uruchomienie prawdziwego zdarzenia DOM, tak jakby coś się faktycznie zmieniło.
źródło
Jeśli dodasz wszystkie swoje wydarzenia z tym fragmentem kodu:
wtedy możesz po prostu użyć
element.on<EVENTNAME>()
gdzie<EVENTNAME>
jest nazwą twojego wydarzenia, a to wywoła wszystkie wydarzenia z<EVENTNAME>
źródło
Do wyzwalania dowolnego zdarzenia w JavaScript.
źródło
jeśli używasz jQuery, powinieneś:
lub MS AJAX:
Lub w surowym kodzie HTML elementu:
Po ponownym przeczytaniu pytania myślę, że przegapiłem - przeczytałem, co było do zrobienia. Nigdy nie znalazłem sposobu, aby zaktualizować element DOM w sposób, który wymusi zdarzenie zmiany, najlepiej jest mieć oddzielną metodę obsługi zdarzeń, taką jak ta:
Ponieważ już piszesz metodę JavaScript, która dokona zmiany, wywołanie jest tylko 1 dodatkową linią.
Lub, jeśli są za pomocą programu Microsoft AJAX można uzyskać dostęp do wszystkich programów obsługi zdarzeń poprzez:
Pozwoliłoby ci to na wykonanie pewnych działań w stylu refleksji, aby znaleźć odpowiednią obsługę zdarzeń do uruchomienia.
źródło
Za pomocą JQuery możesz wykonać następujące czynności:
źródło