Struppi: Dynamische Objektnamen ohne eval ?

Beitrag lesen

Ok, vielleicht denke ich auch zu kompliziert. Ein Beispiel: Ich will in diversen Seiten mit unterschiedlichen Layouts durch einen einzigen Mausklick CSS-Eigenschaften verändern. Und zwar mehrere Eigenschaften pro Klick. Natürlich will ich nicht mehrere Funktionen über den Event-Handler aufrufen und auch nicht für jede einzelne Aktion eine extra Funktion schreiben. Natürlich müßte man für letzteres nur jedesmal eine Standard-Funktion anpassen, aber am Ende ständen doch Dutzende oder Hunderte von seperaten Funktionen. Nicht gerade das was ich mir unter vernünftigem Code vorstelle. Also war meine Idee eine einzelne Funktion zu schreiben und für jede Seite die Anweisungen für den jeweiligen Klick in ein Array zu laden. Dessen Name wird durch den Event-Handler übermittelt und daraufhin die Aktionen im Array ausgeführt.

Hast du einen Vorschlag, wie das besser zu machen ist?

keine Ahnung, aber willst du wirklich hunderte von CSS Eigenschaften ändern (gibt's überhaupt soviele)
Vor allem sind ja in deinem Beispiel auch keine Werte vorhanden.

Ich weiss ja nicht an welche CSS Eigenschaften du so denkst, aber evtl. kann man eine Universal Funktion schreiben.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

// styles der Buttons und des Div

<style>
</style>

// JS funktionen

<script type="text/javascript">

function set()
{
    var l = set.arguments.length;
    var obj = set.arguments[0];

if(obj.style)
    {
        for(var i = 1; i < l;)
        {
            var t = set.arguments[i++];
            var v = set.arguments[i++];
            obj.style[t] = v;
        }
    }

}
</script>
</head>

<body>
<div id="test" style="position:absolute" onclick="set(this, 'top', '300px', 'left', '250px', 'color', 'red');">T E S T</DIV>

</body>
</html>

Funktioniert mit MZ und IE 6.

Struppi.