Hallo,
flyMenu_Action(10, "http://forum.de.selfhtml.org/cgi-bin/fo_post");
flyMenu_Action(10, "JavaScript:alert('Hallo Team-One');");
Nun schaffe ich es nicht, beides gleichzeitig zu behandenl:
a - behandele ich mit Windows.Location
b - mit eval und RegExp
Ich würde es so lösen (abstrahiert):
<p id="a">bla</p>
<script type="text/javascript">
[code lang=javascript]function MenuItem (elem) {
/* private properties */
/* var elem */
var functions = new Array();
var href;
/* construct */
elem.onclick = handler;
/* private methods */
function handler (e) {
var i = 0;
while (functions[i]) {
functions[i](e);
i++;
}
location.href = href;
}
/* public methods */
this.addAction = function (arg) {
if (typeof(arg) == "function") {
functions[functions.length] = arg;
} else if (typeof(arg) == "string") {
href = arg;
}
}
}
var elem = document.getElementById("a");
var item = new MenuItem(elem);
item.addAction(function (e) { window.alert("Hallo Welt!") });
item.addAction("http://de.selfhtml.org/");
item.addAction(function (e) { window.alert("Bla blub, laber sülz.") });
~~~</script>[/code]
Im Prinzip ganz einfach, man übergibt eine Funktion, die dann im functions-Array gespeichert wird. Wenn der Event feuert, führt die Funktion handler alle gespeicherten Funktionen aus und öffnet zuletzt die angegebene Adresse. (Geht mit mehr Aufwand natürlich noch flexibler und ausbaubarer, z.B. kann man location.href = href auch in einer Funktion in functions unterbringen, die immer am Ende des Arrays steht.)
Mathias