IE ruft eine Funktion nicht auf
Twilo
- html
0 Twilo0 Der Martin
0 Twilo0 Der Martin
0 Twilo0 Der Martin
0 Twilo
Hallo,
da ich kein nativen Internet Explorer habe, teste ich mit ein IE 6 über wine (IE4Linux)
ich habe das Problem, dass der IE folgenes Konstrukt nicht ausführt
// ...
var colors = new Array('#00C', '#DDF'); // background, color
// ...
function setActive(Element){
alert('test');
if(document.getElementById(Element)){
document.getElementById(Element).style.backgroundColor = colors[0];
document.getElementById(Element).style.color = colors[1];
}
else{
Element.style.backgroundColor = colors[0];
Element.style.color = colors[1];
}
}
// ...
<a href=":export-xxx.html" target="Main" onclick="setActive(this);">
Wenn ich statt "this" eine ID-Namen übergebe, erscheint die Messagebox und die Hintergrundfarbe wird bei dieser ID geändert.
Skriptfehler werden nicht ausgegeben.
"Skriptdebugging deaktivieren" ist deaktiviert und "Skriptfehler anzeigen" ist aktiviert.
Iceweacel (Firefox) 2.0.0.14 und Opera 9.50 Beta 2 (Build
1962) setzen die Hintergrundfarbe wie gewünscht.
Könnte es daran liegen, dass ich keinen nativen IE verwendet?
mfg
Twilo
Hallo,
ich habe das Problem, dass der IE folgenes Konstrukt nicht ausführt
// ...
var colors = new Array('#00C', '#DDF'); // background, color
// ...
function setActive(Element){
alert('test');
if(document.getElementById(Element)){
document.getElementById(Element).style.backgroundColor = colors[0];
document.getElementById(Element).style.color = colors[1];
}
else{
Element.style.backgroundColor = colors[0];
Element.style.color = colors[1];
}
}
// ...
> `<a href=":export-xxx.html" target="Main" onclick="setActive(this);">`{:.language-html}
nachdem ich den Funktionsnamen geändert habe, funktioniert das Skript wie gewünscht.
mfg
Twilo
--
[Farbtabelle](http://www.farb-tabelle.de)
Hi,
function setActive(Element){
nachdem ich den Funktionsnamen geändert habe, funktioniert das Skript wie gewünscht.
</archiv/2008/1/t164391/#m1071473>
MfG ChrisB
Hallo,
function setActive(Element){
nachdem ich den Funktionsnamen geändert habe, funktioniert das Skript wie gewünscht.
</archiv/2008/1/t164391/#m1071473>
ich hatte nach einigen Sachen gesucht, aber nicht direkt nach den Funktionsnamen.
Nach den Funktionsnamen hatte ich erst gesucht, nachdem die Funktion nach der Namensänderung funktionierte ;-)
mfg
Twilo
Hallo,
function setActive(Element){
alert('test');
if(document.getElementById(Element))
offensichtlich erwartet deine Funktion als Parameter die ID eines HTML-Elements - also einen einfachen String.
<a href=":export-xxx.html" target="Main" onclick="setActive(this);">
Und hier übergibst du gleich ein komplettes HTML-Elementobjekt. Das *kann* nicht funktionieren.
Entweder du übergibst hier nur this.id, das wäre die weniger effiziente Lösung, oder du belässt es bei this, kannst dir dann aber innerhalb der Funktion die Verrenkungen mit getElementById() sparen - denn du hast dann bereits die komplett aufgelöste Referenz auf das Element.
Wenn ich statt "this" eine ID-Namen übergebe, erscheint die Messagebox und die Hintergrundfarbe wird bei dieser ID geändert.
Eben. :-)
Skriptfehler werden nicht ausgegeben.
"Skriptdebugging deaktivieren" ist deaktiviert und "Skriptfehler anzeigen" ist aktiviert.
Oops. Das überrascht mich.
Iceweacel (Firefox) 2.0.0.14 und Opera 9.50 Beta 2 (Build
1962) setzen die Hintergrundfarbe wie gewünscht.
Oops. Das überrascht mich noch viel mehr.
Könnte es daran liegen, dass ich keinen nativen IE verwendet?
Nein - dann müssten sich trotzdem wenigstens Opera und Firefox erwartungskonform verhalten.
So long,
Martin
Hallo,
function setActive(Element){
alert('test');
if(document.getElementById(Element))
offensichtlich erwartet deine Funktion als Parameter die ID eines HTML-Elements - also einen einfachen String.
hast du auch noch ein paar Zeilen tiefer geschaut?
ich gehe davon aus, wenn es keine ID mit den Namen existiert, dass es sich um ein HTMLK-Element handelt, was übergeben wurde
<a href=":export-xxx.html" target="Main" onclick="setActive(this);">
Und hier übergibst du gleich ein komplettes HTML-Elementobjekt. Das *kann* nicht funktionieren.
Entweder du übergibst hier nur this.id, das wäre die weniger effiziente Lösung, oder du belässt es bei this, kannst dir dann aber innerhalb der Funktion die Verrenkungen mit getElementById() sparen - denn du hast dann bereits die komplett aufgelöste Referenz auf das Element.
Das ist eigentlich so gewollt, da nur ein Link eine ID hat - alle anderen nicht
Der Link mit der ID wird von ein anderen Frame aus gesetzt, deshalb rufe ich es per ID auf
mfg
Twilo
Hi,
offensichtlich erwartet deine Funktion als Parameter die ID eines HTML-Elements - also einen einfachen String.
hast du auch noch ein paar Zeilen tiefer geschaut?
ich muss zu meiner Schande gestehen: Nein, den Rest habe ich nur flüchtig überflogen. Sorry, dann sieht deine Funktion wieder korrekt aus - wenn auch recht ungewöhnlich.
ich gehe davon aus, wenn es keine ID mit den Namen existiert, dass es sich um ein HTMLK-Element handelt, was übergeben wurde
Gut. Dann bleibt nur aus Performancegründen zu kritisieren, dass du die relativ "teure" Funktion getElemetById, die ja das ganze DOM durchsucht, mehrfach mit demselben Argument aufrufst. Ein Aufruf, verbunden mit dem Speichern des Rückgabewerts in einer Variablen, wäre wohl günstiger.
Entweder du übergibst hier nur this.id, das wäre die weniger effiziente Lösung, oder du belässt es bei this, kannst dir dann aber innerhalb der Funktion die Verrenkungen mit getElementById() sparen - denn du hast dann bereits die komplett aufgelöste Referenz auf das Element.
Das ist eigentlich so gewollt, da nur ein Link eine ID hat - alle anderen nicht
Der Link mit der ID wird von ein anderen Frame aus gesetzt, deshalb rufe ich es per ID auf
Okay, dann bin ich aber auch mit meinem Latein am Ende.
So long,
Martin
Hallo,
ich gehe davon aus, wenn es keine ID mit den Namen existiert, dass es sich um ein HTMLK-Element handelt, was übergeben wurde
Gut. Dann bleibt nur aus Performancegründen zu kritisieren, dass du die relativ "teure" Funktion getElemetById, die ja das ganze DOM durchsucht, mehrfach mit demselben Argument aufrufst. Ein Aufruf, verbunden mit dem Speichern des Rückgabewerts in einer Variablen, wäre wohl günstiger.
wie meinst du das?
kann ich das Ergebnis in der if-Bedingung gleich zwischenspeichern?
Gibt es eine Möglichkeit zu überprüfen, ob es sich ein Element (this) handelt?
ich würde es gerne wie folgt überprüfen
1. überprüfen ob es ein Element ist
2. überprüfen ob es sich um eine ID handelt
3. ansonsten nichts machen
Entweder du übergibst hier nur this.id, das wäre die weniger effiziente Lösung, oder du belässt es bei this, kannst dir dann aber innerhalb der Funktion die Verrenkungen mit getElementById() sparen - denn du hast dann bereits die komplett aufgelöste Referenz auf das Element.
mfg
Twilo
Hi,
Ein Aufruf, verbunden mit dem Speichern des Rückgabewerts in einer Variablen, wäre wohl günstiger.
wie meinst du das?
kann ich das Ergebnis in der if-Bedingung gleich zwischenspeichern?
Oder schon davor. Darf ich deine ursprüngliche Funktion mal etwas frisieren?
function setActive(Element)
{ var el = document.getElementById(Element);
if (el)
{ el.style.backgroundColor = colors[0];
el.style.color = colors[1];
}
else
{ Element.style.backgroundColor = colors[0];
Element.style.color = colors[1];
}
}
Jetzt hast du bei gleicher Funktionalität nur noch einen Aufruf von getElementById(). Das alert() haeb ich jetzt unterschlagen, und den Funktionsnamen musst du noch ändern, wie du inzwischen weißt.
Gibt es eine Möglichkeit zu überprüfen, ob es sich ein Element (this) handelt?
Du meinst, ein gültiges HTML-Elementobjekt? Ich wüsste nicht, dass das geht.
So long,
Martin
Hallo,
Oder schon davor. Darf ich deine ursprüngliche Funktion mal etwas frisieren?
klar, nur finde ich diese Klammersetzung schrecklich ;-)
function setActive(Element)
{ var el = document.getElementById(Element);
if (el)
{ el.style.backgroundColor = colors[0];
el.style.color = colors[1];
}
else
{ Element.style.backgroundColor = colors[0];
Element.style.color = colors[1];
}
}
Jetzt hast du bei gleicher Funktionalität nur noch einen Aufruf von getElementById(). Das alert() haeb ich jetzt unterschlagen, und den Funktionsnamen musst du noch ändern, wie du inzwischen weißt.
das alert war nur zur Kontrolle drin, ob die Funktion aufgerufen wird.
function setActive(Element){
var id = document.getElementById(Element);
if(id){
Element = id;
}
Element.style.backgroundColor = colorValues[0];
Element.style.color = colorValues[1];
}
gibt es dagegen etwas einzuwenden, außer den Funktionsnamen?
Gibt es eine Möglichkeit zu überprüfen, ob es sich ein Element (this) handelt?
Du meinst, ein gültiges HTML-Elementobjekt? Ich wüsste nicht, dass das geht.
ja, bei selfhtml habe ich leider auch nichts gefunden
mfg
Twilo