Und täglich nervt Netscape :o|
TommyR
- javascript
0 MudGuard0 TommyR
0 Struppi0 Thomas Meinike0 TommyR
Grüssle SelfHTML'ler,
ich hab mal wieder'n problemsche mit dem juten alten Netscape6+/Mozilla1,
und zwar folgendes:
Netscape liefert mir keine id zurück (obj in der funktion imgFade/elm in doOver), in allen anderen Bereichen des Skripts kann ich auf die
id ohne Probs zugreiffen.. meine Frage ist jetzt kann der NN/MOZ was mit "firstChild" (DOM) anfangen? oder warum klappt das nicht?
Hier der Code (für den Zeilenumbruch kann ich nix.. einfach in den Editor kopieren, dann ist's besser lesbar):
function doOver(obj) {
clearTimeout(timerID);
if (!obj || obj=="[object]" || obj=="[object Event]" || obj=="[object MouseEvent]") {
elm = this.id;
if (elm=="" || elm==null || elm=="undefined") {
this.id = "doc__id" + elmId.length; //like the uniqueId from ms, ms__id* :o)
elmId[elmId.length] = "";
doOver(this.id); //return this function
} else {
if (document.getElementById(elm).className!="nofade" && document.getElementById(elm).parentNode.className!="nofade") {
if (document.getElementById(elm).tagName=="IMG" && document.getElementById(elm).className!="nofade") {
alert(elm);
} else if (document.getElementById(elm).firstChild.tagName=="IMG" && document.getElementById(elm).firstChild.className!="nofade") {
alert(document.getElementById(elm).firstChild.id);
}
fade(fadeOutColor, fadeInColor, elm, stepIn); //per Event / mit id
}
}
} else {
elm = obj;
if (document.getElementById(elm).className!="nofade" && document.getElementById(elm).parentNode.className!="nofade") {
if (document.getElementById(elm).tagName=="IMG" && document.getElementById(elm).className!="nofade") {
alert(elm);
} else if (document.getElementById(elm).firstChild.tagName=="IMG" && document.getElementById(elm).firstChild.className!="nofade") {
alert(document.getElementById(elm).firstChild.id);
}
fade(fadeOutColor, fadeInColor, elm, stepIn); //DIREKT!!!!! / mit id
}
}
timerID = setTimeout("pulseDown(elm)",speed);
}
[...]
function fadeImg(obj) {
alert(obj);
}
MfG
Tommy
Hi,
Netscape liefert mir keine id zurück (obj in der funktion imgFade/elm in doOver),
Und wie sieht diese Funktion imgFade aus?
Die vorhandene Funktion fadeImg wird auch nicht aufgerufen von Deinem Code.
Wie soll man Dir also helfen können?
cu,
Andreas
Hy,
ok,hast recht.. das sind die 4 alert befehle im Code.. IE liefert mir dann nen String mit id zurück, Netscape nix.. nurn leeres Dialogfeld..
MfG
Tommy
Grüssle SelfHTML'ler,
ich hab mal wieder'n problemsche mit dem juten alten Netscape6+/Mozilla1,
und zwar folgendes:Netscape liefert mir keine id zurück (obj in der funktion imgFade/elm in doOver), in allen anderen Bereichen des Skripts kann ich auf die
id ohne Probs zugreiffen.. meine Frage ist jetzt kann der NN/MOZ was mit "firstChild" (DOM) anfangen? oder warum klappt das nicht?
Klappt nicht ist eine sehr präzise Fehlerbeschreibung. eine Fehlermeldung erhälst du nicht?
Hier der Code (für den Zeilenumbruch kann ich nix.. einfach in den Editor kopieren, dann ist's besser lesbar):
function doOver(obj) {
clearTimeout(timerID);
if (!obj || obj=="[object]" || obj=="[object Event]" || obj=="[object MouseEvent]") {
elm = this.id;
Was ist den this in dem Kontext?
Das kann alles mögliche sein.
und wenn obj ein Objekt sein soll, ist es kein String, du willst auf typeof obj testen. Das was du da machst ist auf das testen, was in deiner alert box steht wenn du obj mit alter ausgibst, aber darauf kannst du nicht testen.
if (elm=="" || elm==null || elm=="undefined") {
Was soll das denn?
entweder if(!elm) das testet auf '' und null und auf typeof elm = undefined was aber in neueren Browsern eine Warnung auswirft.
this.id = "doc__id" + elmId.length; //like the uniqueId from ms, ms__id* :o)
Jetzt wird's schwierig du vergibst eine ID mehrmals?
Das ist invalide.
elmId[elmId.length] = "";
doOver(this.id); //return this function
jetzt rufst du die Funktion nochmal auf? Mit einer ID als Parameter?
} else {
if (document.getElementById(elm).className!="nofade" && document.getElementById(elm).parentNode.className!="nofade") {
if (document.getElementById(elm).tagName=="IMG" && document.getElementById(elm).className!="nofade") {
alert(elm);
} else if (document.getElementById(elm).firstChild.tagName=="IMG" && document.getElementById(elm).firstChild.className!="nofade") {
alert(document.getElementById(elm).firstChild.id);
Es wäre sinnvoll zu wissen was genau du möchtest.
Da steckt ein Haufen Wissen und Halbwissen drin. Du weißt was du da tust? Ich nicht.
Struppi.
Hy,
das ist nich die frage gewesen..
die dinge die du gequotest hast gehören zu Standart fade, das unter IE/NN/OP perfekt läuft.. und ja ich weiss was ich da tuhe weil ich den code ja geschrieben habe, nur muss ich dir sagen dass es sich aus gewissen gründen nicht mehr code gepostet habe.. die Funktion die du hier siehst ist ein Teil eines FadeSkriptes..
Achja:
this.id = "doc__id" + elmId.length; //like the uniqueId from »»ms, ms__id* :o)
»»Jetzt wird's schwierig du vergibst eine ID mehrmals?
»»Das ist invalide.
Nein, das skript vergibt nur an Elemente ohne Id eine id, mit das skript weiss wwelches Element es ansprechen soll, da ja OP/NN die uniqueId des MSIE nich unterstüzten.. Also: Erst lesen, dann denken/verstehen und dann posten..
MfG
ein vollkommen ausgelasteter Tommy Rößger
Hy,
das ist nich die frage gewesen..
die dinge die du gequotest hast gehören zu Standart fade, das unter IE/NN/OP perfekt läuft.. und ja ich weiss was ich da tuhe weil ich den code ja geschrieben habe, nur muss ich dir sagen dass es sich aus gewissen gründen nicht mehr code gepostet habe.. die Funktion die du hier siehst ist ein Teil eines FadeSkriptes..
Ich vertsehe dich nicht. Was ist ein "standard fade"?
Ich kann nur den Code kommentieren/verbessern den ich kenne und dort sind ein Haufen Fehler bzw. ungereimtheiten drin.
Da irgendwas (du schreibst ja nicht was) nicht funktioniert, weißt du offensichtlich nicht 100% was du tust.
und nochmal:
function doOver(obj) {
clearTimeout(timerID);
if (!obj || obj=="[object]" || obj=="[object Event]" || obj=="[object MouseEvent]") {
elm = this.id;
this on dem Kontext ist alles Mögliche, bzw gar nichts. und die Strings auf die du testet sind auch falsch, es sein den du rufst die Funktion so auf:
doOver("[object Event]")
was ich aber bezweifle.
Achja:
this.id = "doc__id" + elmId.length; //like the uniqueId from »»ms, ms__id* :o)
»»Jetzt wird's schwierig du vergibst eine ID mehrmals?
»»Das ist invalide.Nein, das skript vergibt nur an Elemente ohne Id eine id, mit das skript weiss wwelches Element es ansprechen soll, da ja OP/NN die uniqueId des MSIE nich unterstüzten.. Also: Erst lesen, dann denken/verstehen und dann posten..
Das haste recht.
aber nach wie vor ist this irgendwas, ich weiß nicht was das sein soll. Es könnte das window Objekt sein, oder eine neue Instanz von doOver
wie gesagt wenn man wüßte was genau du da machen willst könnte man eher helfen.
Struppi.
Grüssle,
this ist in diesem Falle das derzeit aktive HTML-Element.. das funktioniert ja auch alles (Netscape und IE und OP können Links ganz Normal faden [wie man es auch von dem FadeScript kennt, was es im i.net derzeit gibt]), nur auf die Id kann ich nich so zugreifen wie ich will:
»»if (document.getElementById(elm).className!="nofade"
Hier kann ich auf elm ohne probs zugreifen, doch hier:
»»alert(document.getElementById(elm).firstChild.id);
geht es nicht mehr.. (die id des firstChild wird dynamisch vergeben, so das ich im HTML-Code kein id="" mehr notieren muss.. und es funktionier auch ganz normal [nur mal so am rande])
MfG
Tommy
Grüssle,
this ist in diesem Falle das derzeit aktive HTML-Element.. das funktioniert ja auch alles (Netscape und IE und OP können Links ganz Normal faden [wie man es auch von dem FadeScript kennt, was es im i.net derzeit gibt]), nur auf die Id kann ich nich so zugreifen wie ich will:
Du es nicht. Ich hab mir mal die Mühe gemacht, weil du ja so gar nichts anbietest und ein paar Tersts gemacht, also beim ir kommt in allen Browsern das gewünschte Ergebnis.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>Testcase</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
function showObj(obj)
{
alert(this);
alert((this==window));
// this ist window und nicht das aktive Element.
alert(obj);
alert((obj == '[object HTMLDivElement]') );
// Ich wußte nicht das hier der Browser wirklich den String umwandelt
// aber so heißt das z.b. bei Mozilla und bei Opera wird
// Das sicher auch anders gehandhabt
alert(typeof obj);
alert(typeof obj == 'object');
// so würde man es normalerweise machen
alert(obj.id);
// hier ist die ID kein Problem
alert(obj.firstChild.id);
// und die Id vom firstChild
}
</script>
</head>
<body>
<div style="border:1px solid black;" id="test" onmouseover="showObj(this);"><img id="next_id" src="#">
TEST
</DIV>
</body>
</html>
Also bitte mal in Javascript Konsole gucken was da steht (auch die Warnungen) und dan entweder selber die Lösung finden oder auc mal relevante Teile posten.
Danke.
Struppi.
Hallo,
id ohne Probs zugreiffen.. meine Frage ist jetzt kann der NN/MOZ was mit "firstChild" (DOM) anfangen? oder warum klappt das nicht?
NN 6+ koennen damit durchaus etwas anfangen. Schau aber mal nach, ob firstChild in Deinem Code nicht einen Zeilenumbruch, also einen Textknoten, darstellt.
MfG, Thomas
Hy,
Nein, firstChild ist eine Grafik, die in einem Link steht. (firstChild = IMG; parentNode = A)
Und was das seltsame ist, auf den className kann ich zugreifen, nur nicht auf die id des Elementes (obwohl es eine hat)
MfG
Tommy
Hallo,
Nein, firstChild ist eine Grafik, die in einem Link steht. (firstChild = IMG; parentNode = A)
Und was das seltsame ist, auf den className kann ich zugreifen, nur nicht auf die id des Elementes (obwohl es eine hat)
Mal mit firstChild.getAttribute("id") probiert?
MfG, Thomas