Fehlermeldung "Not enough arguments"
Yadgar
- javascript
0 Ashura0 Gunnar Bittersmann-1 Joachim0 Gunnar Bittersmann0 Joachim
-2 s sschumann0 wahsaga
0 Joachim
High!
Nachdem das Grundgerüst meiner Javascript-generierten Navigationsleiste steht, würde ich sie gerne mit ein paar schicken onMouseover/onClick-Effekten aufpeppen... also erzeugte ich für die Inline-Bilder zusätzliche Attribut-Knoten mit den Event-Handlern, z. B.:
over2[i] = document.createAttribute("onMouseover");
over2[i].nodeValue = "n" + i.toString()+"over.gif";
im2[i].setAttribute(over2[i]); // Zeile 122
Das führte zu einer Fehlermeldung, die sich auf die letzte der drei Zeilen bezog (im2[i] ist das jeweilige Inline-Bild in der Navigationsleiste): "not enough arguments" ... in line 122
Was mache ich falsch?
Bis bald im Khyberspace!
Yadgar
Hallo Yadgar.
Nachdem das Grundgerüst meiner Javascript-generierten Navigationsleiste steht, würde ich sie gerne mit ein paar schicken onMouseover/onClick-Effekten aufpeppen...
Du nutzt eine gänzlich per JS generierte Navigation?
Und warum nutzt du nicht die von CSS gegebenen http://de.selfhtml.org/css/eigenschaften/pseudoformate.htm#link_visited_hover_active_focus@title=Möglichkeiten hierfür?
im2[i].setAttribute(over2[i]); // Zeile 122
Das führte zu einer Fehlermeldung, die sich auf die letzte der drei Zeilen bezog (im2[i] ist das jeweilige Inline-Bild in der Navigationsleiste): "not enough arguments" ... in line 122
Was mache ich falsch?
Du liest nicht.
Welches Attribut soll den den Wert erhalten? Lies dir bitte noch einmal die Syntax für http://de.selfhtml.org/javascript/objekte/node.htm#set_attribute@title=setAttribute() durch.
Einen schönen Mittwoch noch.
Gruß, Ashura
High!
Du nutzt eine gänzlich per JS generierte Navigation?
Und warum nutzt du nicht die von CSS gegebenen http://de.selfhtml.org/css/eigenschaften/pseudoformate.htm#link_visited_hover_active_focus@title=Möglichkeiten hierfür?
Das Problem ist, dass die einzelnen Seiten in einer hierarchischen Baumstruktur stehen und diese Struktur entsprechend der Schachtelungstiefe der gerade geladenen Seite in der Navigationsleiste abgebildet wird - wie soll das mit CSS gehen?
Welches Attribut soll den den Wert erhalten? Lies dir bitte noch einmal die Syntax für http://de.selfhtml.org/javascript/objekte/node.htm#set_attribute@title=setAttribute() durch.
Ich habe versucht, die Stelle zu korrigieren:
name = "n"+i.toString()+"over.gif";
att = document.createAttribute("onMouseOver");
im2[i].setAttribute(att, name); // Zeile 122
und bekomme für Zeile 122 jetzt:
Error: uncaught exception: [Exception... "String contains an invalid character" code: "5" nsresult: "0x80530005 (NS_ERROR_DOM_INVALID_CHARACTER_ERR)" location: "file:///D:/Dokumente%20und%20Einstellungen/diego/Desktop/Benutzer/Bleimann/nav.js Line: 122"]
Wieso das? Mit alert(name) wird ein einwandfreier String, nämlich der Dateiname des bei mouseOver anzuzeigenden Inline-Bildes angezeigt!
Bis bald im Khyberspace!
Yadgar
Hallo Yadgar.
Ich habe versucht, die Stelle zu korrigieren:
name = "n"+i.toString()+"over.gif";
att = document.createAttribute("onMouseOver");
im2[i].setAttribute(att, name); // Zeile 122
1\. Warum setzt du das betroffene Attribut nicht einfach?
Es exisitert bereits, also:
`im2[i].onmouseover = name;`{:.language-javascript}
2\. Welchen Zweck sollte es haben, einem Eventhandler die URL einer Ressource zuzuweisen?
Im Endeffekt hast folgendes:
`<img src="..." onmouseover="n2over.gif" />`{:.language-javascript}
Ergibt dies deiner Meinung nach einen Sinn?
3\. i.toString()
Das toString() dürfte überflüssig sein, da der Index i automatisch zu einem String wird, wenn er mit einem solchen verkettet wird.
> Wieso das? Mit alert(name) wird ein einwandfreier String, nämlich der Dateiname des bei mouseOver anzuzeigenden Inline-Bildes angezeigt!
Das ist auch nicht dein Problem.
Du versuchst, dem onmouseover-Eventhandler dynamisch eine Funktion zuzuweisen. Dies ist jedoch nicht ganz trivial, im Archiv findest du einige Lösungsansätze hierzu.
Einen schönen Donnerstag noch.
Gruß, Ashura
--
[The End of an Era...](http://www.nightwish.com/english/lettertotarjaen.html)
High!
Jetzt habe ich den ganzen Wust mit createAttribute etc. durch folgende acht Zeilen ersetzt:
over = new Image();
click = new Image();
over.src = "n"+i+"over.gif";
click.src = "n"+i+"click.gif";
out = "n"+i+".gif";
im2[i].onmouseover = "src = over.src";
im2[i].onclick = "src = click.src";
im2[i].onmouseout = "src = out";
Fehlermeldungen bekomme ich keine mehr... trotzdem ändert sich beim Überfahren bzw. Anklicken der Navigationselemente die Grafik nicht!
Du versuchst, dem onmouseover-Eventhandler dynamisch eine Funktion zuzuweisen.
Nein, ich will dynamisch erzeugten und platzierten Navigationselementen Eventhandler (onMouseOver, onClick und onMouseOut) zuweisen, die Inhalte der Eventhandler ändern sich jedoch nicht, von daher geht es nicht um dynamisch zugewiesene Funktionen!
Bis bald im Khyberspace!
Yadgar
Hallo Yadgar,
im2[i].onmouseover = "src = over.src";
im2[i].onclick = "src = click.src";
im2[i].onmouseout = "src = out";
Eventhandler regeln, was beim eintreten eines Events gemacht werden soll. Daher sollte man dem Eventhandler eine Funktion zuweisen.
function tuwas() {
...
}
...
im2[i].onmouseover=tuwas;
oder
im2[i].onmouseover=function() { ... } ;
z.B.
im2[i].onmouseover=function() { this.src=over.src } ; (nicht getestet )
Gruß, Jürgen
High!
Eventhandler regeln, was beim eintreten eines Events gemacht werden soll. Daher sollte man dem Eventhandler eine Funktion zuweisen.
Genau das habe ich gemacht, der Code sieht jetzt so aus:
over = new Image();
click = new Image();
out = new Image();
over.src = "n"+i+"over.gif";
click.src = "n"+i+"click.gif";
out.src = "n"+i+".gif";
im2[i].onmouseover = function (evt) {this.src = over.src};
im2[i].onclick = function (evt) { this.src = click.src };
im2[i].onmouseout = function (evt) { this.src = out.src };
Jetzt reagiert die Navigationsleiste auch tatsächlich auf Überfahren bzw. anklicken, nur...
...die Leiste enthält zwei Navigationselemente (im2[0] und im2[1]), aber aus einem mir nicht ersichtlichen Grund werden *beiden* Navigationselemente die Alternativ-Grafiken für im2[1] zugewiesen!
Woran könnte das liegen? Wenn ich die Variablen für die neu anzulegenden Bilder (also over, click und out) als Array mit der Größe 2 programmiere und sie in den Wert- und Funktionszuweisungen (ab Zeile 4) entsprechend mit Index versehe, bekomme ich die Meldung "over[i] has no properties"! Rätsel über Rätsel...
Bis bald im Khyberspace!
Yadgar
Hallo Yadgar,
over = new Image();
click = new Image();
out = new Image();
over.src = "n"+i+"over.gif";
click.src = "n"+i+"click.gif";
out.src = "n"+i+".gif";
im2[i].onmouseover = function (evt) {this.src = over.src};
im2[i].onclick = function (evt) { this.src = click.src };
im2[i].onmouseout = function (evt) { this.src = out.src };
wenn der (das?) Event kommt, sind die Variablen (over, click, out) nicht mehr vorhanden bzw. mit dem letzten Wert überschrieben. Lass den oberen Teil als Preloader drin, schreib aber in die Eventdefinition direkt den Dateinamen. Ich glaube, das geht so:
im2[i].onmouseover = function (evt) {this.src = "n"+i+"over.gif"};
Ich bin mir jetzt nicht ganz sicher, ob das so klappt, aber das wurde hier schon öfter diskutiert, schau mal ins Archiv.
Gruß, Jürgen
High!
wenn der (das?) Event kommt, sind die Variablen (over, click, out) nicht mehr vorhanden bzw. mit dem letzten Wert überschrieben. Lass den oberen Teil als Preloader drin,
Was meinst Du mit "Preloader"? Einfach unverändert lassen oder ganz aus der Arrayschleife ausgliedern? Ich habe es vorsichtshalber erst einmal drin gelassen...
im2[i].onmouseover = function (evt) {this.src = "n"+i+"over.gif"};
Ich bin mir jetzt nicht ganz sicher, ob das so klappt, aber das wurde hier schon öfter diskutiert, schau mal ins Archiv.
Das funktioniert leider nicht... es gibt zwar keine Fehlermeldung, aber auch keine Reaktion der Navigationsleiste mehr!
Und im Archiv suchen... das dauert Stunden, soviel Zeit habe ich nicht, um vier Uhr muss ich hier weg!
Bis bald im Khyberspace!
Yadgar
Yadgar,
Nachdem das Grundgerüst meiner Javascript-generierten Navigationsleiste steht […]
Was mache ich falsch?
Du setzt eine clientseitige Technik zu Navigationszwecken voraus. Für viele Besucher u.a. Clients wird deine Seite dadurch völlig wertlos.
Live long and prosper,
Gunnar
Hi,
Für viele Besucher u.a. Clients wird deine Seite dadurch völlig wertlos.
Hatte er _danach_ gefragt?
Gruesse, Joachim
Für viele Besucher u.a. Clients wird deine Seite dadurch völlig wertlos.
Hatte er _danach_ gefragt?
Joachim,
Das Beste an diesem Forum ist, dass man auch auch Antworten bekommt, nach denen man nicht gefragt hat.
Dass es Leute gibt, die einen darauf hinweisen, dass man mit seinem Konzept vorn vornherein auf dem Holzweg ist, anstatt zu „helfen“, ein sinnloses Konzept aufzupeppen.
Live long and prosper,
Gunnar
Hi,
Dass es Leute gibt, die einen darauf hinweisen, dass man mit seinem Konzept vorn vornherein auf dem Holzweg ist, anstatt zu „helfen“, ein sinnloses Konzept aufzupeppen.
Im Prinzip stimme ich Dir zu. Imho sollte ein solcher Hinweis jedoch _Bestandteil_ des Loesungsvorschlages sein - nicht Selbstzweck. Moeglicherweise hat er ja Alternativen eingeplant.
Gruesse, Joachim
Hatte er _danach_ gefragt?
Das Phänomen "Ich weiß nichts, hab aber was zu sagen".
hi,
Für viele Besucher u.a. Clients wird deine Seite dadurch völlig wertlos.
Hatte er _danach_ gefragt?
Vielleicht hatte er darüber ja auch noch gar nicht _nachgedacht_ ...?
gruß,
wahsaga
Hi,
over2[i] = document.createAttribute("onMouseover");
over2[i].onmouseover = ...
im2[i].setAttribute(over2[i]); // Zeile 122
setAttribute(name, wert)
Gruesse, Joachim