e.onchange = function(f) { return function() { f.onchange(); }}(f);
Das ist ganz clever, nur sollte die Funktion nicht für jedes Element neu erzeugt werden, sondern in der äußeren document.forms-Schleife.
Eigentlich muss sie insgesamt nur einmal erzeugt werden, weil Closures hier die Sache m.M.n. nicht signifikant vereinfachen. Man kann auch einfach this.form.onchange() schreiben, dann verbessert man die Performanz und spart auch Komplexität ein. (Was der obige Code macht und warum man Closures in Schleifen so notieren muss, versteht glaube ich niemand außer ein paar JS-Cracks.)
Mathias