Wie erzwinge ich programmgesteuert ein Änderungsereignis für eine Eingabe?
Ich habe so etwas versucht:
var code = ele.getAttribute('onchange');
eval(code);
Aber mein Endziel ist es, alle Listener-Funktionen auszulösen, und das scheint nicht zu funktionieren. Es wird auch nicht nur das Attribut 'value' aktualisiert.
javascript
Soldarnal
quelle
quelle
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
In jQuery verwende ich meistens:
quelle
ugh benutze eval für nichts . Nun, es gibt bestimmte Dinge, aber sie sind äußerst selten. Sie würden dies eher tun:
Weitere Optionen finden Sie hier: http://jehiah.cz/archive/firing-javascript-events-properly
quelle
new Event(...)
unddispatchEvent
ist heutzutage anscheinend die richtige Lösung.Element.addEventListener
Ereignisse behandelt haben. Um dies auf moderne Weise zu erreichen, lesen Sie die Antwort von @ Miscreant.Aus irgendeinem Grund löst ele.onchange () im IE auf meiner Seite eine Ausnahme "Methode nicht gefunden" für mich aus. Daher habe ich diese Funktion über den von Kolten bereitgestellten Link verwendet und fireEvent (ele, 'change') aufgerufen, was funktioniert hat ::
Ich habe jedoch eine Testseite erstellt, auf der bestätigt wurde, dass der Aufruf von onchange () funktionieren sollte:
Bearbeiten: Der Grund, warum ele.onchange () nicht funktioniert hat, war, dass ich für das Ereignis onchange nichts deklariert habe. Aber das fireEvent funktioniert immer noch.
quelle
element.dispatchEvent(new Event('change', true, true))
anstelle von all dem Arkanen und meistens veraltetcreateEvent
und soinitEvent
.Dies ist die richtigste Antwort für IE und Chrome ::
quelle
Entnommen aus dem unteren Bereich von QUnit
Sie können das $ .browser-Zeug natürlich durch Ihre eigenen Browser-Erkennungsmethoden ersetzen, um es jQuery unabhängig zu machen.
So verwenden Sie diese Funktion:
Dies wird im Grunde das echte DOM-Ereignis auslösen, als ob sich tatsächlich etwas geändert hätte.
quelle
Wenn Sie alle Ihre Ereignisse mit diesem Codeausschnitt hinzufügen:
Dann können Sie einfach verwenden,
element.on<EVENTNAME>()
wo<EVENTNAME>
der Name Ihres Ereignisses steht, und das ruft alle Ereignisse mit auf<EVENTNAME>
quelle
Zum Auslösen eines Ereignisses in Javascript.
quelle
Wenn Sie jQuery verwenden, haben Sie:
oder MS AJAX:
Oder im rohen HTML des Elements:
Nachdem ich die Frage noch einmal gelesen habe, glaube ich, dass ich falsch gelesen habe, was zu tun war. Ich habe noch nie eine Möglichkeit gefunden, ein DOM-Element so zu aktualisieren, dass ein Änderungsereignis erzwungen wird. Am besten haben Sie eine separate Ereignishandlermethode wie die folgende:
Da Sie bereits eine JavaScript-Methode schreiben, die die Änderung vornimmt, muss nur eine zusätzliche Zeile aufgerufen werden.
Oder, wenn Sie sind die Microsoft AJAX - Framework verwenden , können Sie alle Event - Handler Zugriff über:
Es würde Ihnen ermöglichen, einige Reflexionsarbeiten durchzuführen, um die richtigen Event-Handler zum Auslösen zu finden.
quelle
Mit JQuery können Sie Folgendes tun:
quelle