#1
| ||||
| ||||
JavaScript: lokale Variablen in anonymen FunktionenHi, da bin ich schon wieder. Diesmal stehe ich vor einem anderen Problem: ich möchte mehrere Event-Handler auf einer Seite einrichten, die jeweils verschiedene Dinge in die Statuszeile des Browsers schreiben sollen. Konkret will ich, dass beim mouseover über Submit-Buttons in Formularen deren Zieladresse wie bei jedem anderen Link angezeigt wird. Dafür habe ich mir folgenden Code gebastelt: Code: // Event handler that adds mouse hover statusbar information about HTML forms' // submit buttons' target URL // // NOTE: There are several problems with this function: // * It doesn't correctly handle the base path on Firefox, but it does on Opera. // * It always shows the page's last form's action URL for all submit buttons on the page. // Maybe something from http://weblogs.asp.net/asmith/archive/2003/10/06/30744.aspx can help here. // TODO,FIXME // function UnbAddFormStatus(event) { var i; for (i = 0; i < document.forms.length; i++) { // For all forms in the document var f = document.forms[i]; var url = f.getAttribute("action"); if (url.indexOf("/") == 0) url = document.location.href.match(/^(.*?)\//)[1] + "/" + url; else if (url.indexOf("/") == -1) url = document.location.href.match(/^(.*)\//)[1] + "/" + url; var method = f.method.toUpperCase(); var text = ""; text += url; if (method == "POST") text += " (" + method + ")"; var j; for (j = 0; j < f.elements.length; j++) { // For all elements in that form var e = f.elements[j]; if (e.tagName == "input" && (e.type == "submit" || e.type == "image")) { // If submit button e.addEventListener("mouseover", function() {window.status = text;}, false); e.addEventListener("mouseout", function() {window.status = "";}, false); //alert("Added info: " + text + " for button: " + e.value); } } } } // Call handler function when the page has finished loading window.addEventListener("load", UnbAddFormStatus, false); Was ich jetzt suche ist eine Methode, mit der ich in den anonymen Funktionen Daten speichern kann, die da auch drin bleiben und nicht nochmal von außen verändert werden. Ich hab jetzt mehrere Implementierungen mit anonymen Funktionen gesehen, die sind toll, um nen lokalen Namensraum zu schaffen etc, aber mein Ziel konnte ich bislang noch nicht erreichen. Ich hab zwar in Algorithmik I mal Scheme (eine Lisp-Variante) gelernt, und da auch mit closures gearbeitet (kurz: jede Funktion hat ihren eigenen permanenten Kontext), allerdings kann ich mich nicht mehr an die Details erinnern, was mir ohne passende JavaScript-Syntax wohl auch nicht viel hilft. Dass dieses closure-Konzept in JS auch funktioniert, sagt die im Code angegebene URL aus. Ich weiß, dass das hier nicht primär ein JavaScript-Expertenforum ist, aber mir fällt grad keins ein, wo man sowas fragen könnte. Bin natürlich auch für Links dankbar, die mich an entsprechende Communities verweisen. __________________ Yves Goergen Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit) |
#2
| |||
| |||
Closures in JavaScriptIch weiß der Artikel ist schon älter, aber da ich ein ähnliches Problem hatte, hier einmal des Rätsels Lösung: Closures. Sie ermöglichen es Werte zwischen zu speichern und Sichtbarkeiten einzuschränken. Ein kurze Einleitung wie diese zu Implementieren sind erhält man z.B. hier: closures in javascript |
Stichworte |
- |