Nutzt man zum binden von JavaScript Funktionen an HTML Elementen nicht das wohlbekannte Konstrukt [code] <select id="auswahl" onchange="machwas()" /> [/code] sondern die modernere Variante mit [url=http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration]addEventListener[/url] [2] (DOM-Event Modell [3], z.B. Firefox) oder [url=http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/attachevent.asp]attachEvent[/url] [4] (Internet Explorer), die z.B. den Vorteil hat dass man mehr wie eine Funktion an das Event binden kann. So büsst man jedoch eine einfache Möglichkeit ein dieses Event auch per JavaScript manuell abzufeuern. [code] var o = document.getElementById('auswahl'); o.onchange(); [/code] Funktioniert dann nicht mehr, da in den entsprechenden Funktions-Rümpfen keine Funktion mehr eingetragen ist und der Aufruf mit einer Fehlermeldung quittiert wird. Jedoch bietet das DOM-Event Modell auch da eine Möglichkeit, natürlich wieder Browserspezifisch. Mit einer kleinen Hilfsfunktion ist dies jedoch auch sehr einfach und schnell machbar. [code] function fireEvent (eventType, elementID) { var o = document.getElementById(elementID); if (document.createEvent) { var evt = document.createEvent("Events"); evt.initEvent(eventType, true, true); o.dispatchEvent(evt); } else if (document.createEventObject) { var evt = document.createEventObject(); o.fireEvent('on' + eventType, evt); } } [/code] Um nun ein Event manuell zu feuern macht man nur noch folgendes [code] fireEvent('change', 'auswahl'); [/code] Und schon werden alle dem Element-Event zugeordneten Funktionen aufgerufen. Nutzt man das [url=http://prototype.conio.net/]Prototype JavaScript Framework[/url] [1] kann man diese Funktion auch in den Event-Namespace legen und auch die spezialitäten des Frameworks nutzen. [code] Event.fireEvent = function(eventType, element) { if (document.createEvent) { var evt = document.createEvent("Events"); evt.initEvent(eventType, true, true); $(element).dispatchEvent(evt); } else if (document.createEventObject) { var evt = document.createEventObject(); $(element).fireEvent('on' + eventType, evt); } }[/code] Der Aufruf ist analog zum oberen. [code] Event.fireEvent('change', 'auswahl'); // oder wenn man das HTMLElement schon hat var o = document.getElementById('auswahl'); Event.fireEvent('change', o); Event.fireEvent('click', o); [/code]
[1] [url=http://prototype.conio.net/]Prototype JavaScript Framework[/url] [2] [url=http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration]DOM: Event listener registration[/url] [3] [url=http://www.w3.org/TR/DOM-Level-2-Events/events.html]W3C: Document Object Model Events[/url] [4] [url=http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/attachevent.asp]Internet Explorer: attachEvent Method[/url]