Yadgar: Fehlermeldung "Not enough arguments"

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

  1. 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

    1. 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

      1. 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)
        
        1. 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

          1. 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

            1. 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

              1. 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

                1. 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

  2. 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

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hi,

      Für viele Besucher u.a. Clients wird deine Seite dadurch völlig wertlos.

      Hatte er _danach_ gefragt?

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. 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

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. 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

          --
          Am Ende wird alles gut.
      2. Hatte er _danach_ gefragt?

        Das Phänomen "Ich weiß nichts, hab aber was zu sagen".

      3. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    over2[i] = document.createAttribute("onMouseover");

    over2[i].onmouseover =  ...

    im2[i].setAttribute(over2[i]);  // Zeile 122

    setAttribute(name, wert)

    Gruesse, Joachim

    --
    Am Ende wird alles gut.