steffen: event-händler onclick

Hallo meine Retter :)

So ausgeschlafen und ohne leichtsinnsfehler (hoffe ich) hab ich wieder ein Problem. Es dreht sich um den event händler onclick.

Derzeit schaut das ganze so aus:

current_link = document.createElement("a");
current_link.event.onclick = 'window.open("index.php?action=costumeredit&id=", "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no")';

Da scheint aber noch irgendetwas faul zu sein. Könnt ihr mir helfen? Danke euch schonmal für die Hilfe.

steffen

  1. Hallo,

    also vielleicht lieg ich daneben, aber ich äußere mal meine Vermutung.

    current_link.event.onclick = 'window.open("index.php?action=costumeredit&id=", "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no")';

    So, nun hast du einen Link, dessen onclick-Event mit einem String belegt ist - wenn das überhaupt zulässig ist, vielleicht kapituliert der Browser aber hier schon. Das Problem liegt darin, dass du meinst nur weil das im HTML als Zeichenkette im Attribut angegeben ist, wäre das auch in JavaScript so. Das ist wohl ein Fehler. Außerdem würde ich das .event weglassen, das hab ich persönlich noch nie gesehen.

    Die korrekte Zuweisung könnte z.B. so aussehen
    current_link.onclick = function() { window.open("index.php?action=costumeredit&id=", "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no"); }

    Ich bin mir gerade nicht sicher, ob es auch ohne das function() direkt mit window.open ginge, da bin ich überfragt.

    MfG
    Rouven

    --
    -------------------
    Inter Arma Enim Silent Leges  --  Cicero
    1. Hi Rouven,

      ja hab natürlich alles probiert, aber da es ein event-händler ist hab ich es mal mit ins Beispiel geschrieben nich das wer lacht haha hast ja gar kein event. hingeschrieben.

      Leider funktioniert dein Beispiel auch nicht.

      steffen

      1. Hallo steffen.

        ja hab natürlich alles probiert, aber da es ein event-händler ist hab ich es mal mit ins Beispiel geschrieben nich das wer lacht haha hast ja gar kein event. hingeschrieben.

        Leider funktioniert dein Beispiel auch nicht.

        Husseldiguggeldu!

        Deine Aufgabe ist es, uns wenigstens alle Fehlermeldungen mitzuteilen, die du erhältst. (Auch wenn das Problem vermutlich am IE liegt, wie ich eben schon anmerkte.)

        Einen schönen Donnerstag noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Hi Mathias,

          Deine Aufgabe ist es, uns wenigstens alle Fehlermeldungen mitzuteilen, die du erhältst. (Auch wenn das Problem vermutlich am IE liegt, wie ich eben schon anmerkte.)

          Wenn ich wüßte wie ich das mache würde ich das schon tun :) Nutze FF und normal ist da so ein nettes Symbol das anzeigt JS Fehler, aber ich hab auch letztens danach gesucht und nichts gefunden.

          mfg steffen

          1. Hallo steffen.

            Nutze FF und normal ist da so ein nettes Symbol das anzeigt JS Fehler, aber ich hab auch letztens danach gesucht und nichts gefunden.

            Von einem „netten Symbol“ weiß ich nichts, aber von einer sehr auskunftsfreudigen Fehlerkonsole.

            Einen schönen Donnerstag noch.

            Gruß, Mathias

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
            1. Hi Mathias,

              gut hab die console gefunden.

              Und nun der knaller geht trotzdem nicht und die konsole zeigt nix an :-D Konnt mir den grinser nich verkneifen :P

              Derzeit schaut das ganze so aus:

              current_link = document.createElement("a");
              current_link.onclick = 'return window.open("http://web.de", , "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no");';

              wenn ich ein

              current_link.href = "http://web.de";

              einbaue geht er im aktuellen Fenster in die url aber immernoch kein Popup :(

              Oder hab ich das mit dem 'return' falsch aufgeschnappt?

              steffen

              1. Hallo steffen.

                current_link.onclick = 'return window.open("http://web.de", , "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no");';

                wenn ich ein

                current_link.href = "http://web.de";

                einbaue geht er im aktuellen Fenster in die url aber immernoch kein Popup :(

                Oder hab ich das mit dem 'return' falsch aufgeschnappt?

                Ja, hast du. Sofern du die Ausführung des Links verhindern willst, muss obiges entweder so aussehen:

                current_link.onclick = 'window.open("http://web.de", , "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no");return false;';

                Oder so:

                current_link.onclick = function() {  
                  
                  window.open("http://web.de", , "Popupfenster", "width=555, height=444 ,resizable=no, toolbar=no, scrollbar=no");  
                  return false;  
                  
                };
                

                (Wobei du die Zieladresse besser im href–Attribut des Links notierst und mit this.href als ersten Parameter für window.open() darauf Bezug nimmst.)

                Deine Variante würde nur Sinn ergeben, wenn du sie wie folgt schreiben würdest:

                function fenster_oeffnen(uri) {  
                  
                  window.open(uri, , "Popupfenster", "width=555, height=444 ,resizable=no, toolbar=no, scrollbar=no");  
                  return false;  
                  
                }  
                  
                current_link.onclick = function() {  
                  
                  return fenster_oeffnen(this.href); // Gibt somit „false“ zurück.  
                  
                };
                

                Einen schönen Donnerstag noch.

                Gruß, Mathias

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                [HTML Design Constraints: Logical Markup]
                1. Danke dir erstmal :)

                  Klappt alles wunderbar bis auf eine sache. web.de ist natürlich nicht du url, sondern:

                  index.php?action=costumer&id=" + KundeId;

                  Leider wird 'KundeId' nicht erkannt.

                  Derzeit schaut das ganze so aus:

                  function open_costumer(url)
                  {
                   window.open("index.php?action=" + url + "&id=" + KundeId, "Popupfenster", "width=555, height=444 ,resizable=no, toolbar=no, scrollbar=no");
                   return false;
                  }
                  function create_link()
                  {
                   current_link = document.createElement("a");
                   current_link.href = "#";
                   current_link.onclick = function(){ open_costumer("costumeedit"); }
                   current_link.appendChild(document.createTextNode("Bearbeiten"));
                   var Ausgabebereich = document.getElementById("item1");
                   Ausgabebereich.appendChild(current_link);
                  }

                  KundeId wird ausserhalb geändert. Wenn ich alert(KundeId); innerhalb von create_link() mache, wird es korrekterweiße angezeigt, jedoch im open_costumer() nicht :(

                  steffen

                  1. Hallo steffen.

                    index.php?action=costumer&id=" + KundeId;

                    Leider wird 'KundeId' nicht erkannt.

                    Derzeit schaut das ganze so aus:

                    function open_costumer(url)
                    {
                    window.open("index.php?action=" + url + "&id=" + KundeId, "Popupfenster", "width=555, height=444 ,resizable=no, toolbar=no, scrollbar=no");
                    return false;
                    }
                    function create_link()
                    {
                    current_link = document.createElement("a");
                    current_link.href = "#";
                    current_link.onclick = function(){ open_costumer("costumeedit"); }
                    current_link.appendChild(document.createTextNode("Bearbeiten"));
                    var Ausgabebereich = document.getElementById("item1");
                    Ausgabebereich.appendChild(current_link);
                    }

                    KundeId wird ausserhalb geändert. Wenn ich alert(KundeId); innerhalb von create_link() mache, wird es korrekterweiße angezeigt, jedoch im open_costumer() nicht :(

                    Dann ändere open_customer (letzteres meintest du vermutlich eher) einmal wie folgt ab:

                    function open_customer(url, id) { // Um die ID ergänzt  
                      
                      window.open("index.php?action=" + url + "&id=" + id, "Popupfenster", "width=555, height=444 ,resizable=no, toolbar=no, scrollbar=no");  
                      return false;  
                      
                    }
                    

                    Und rufe es wie folgt auf:

                    function create_link() {  
                      
                      current_link = document.createElement("a");  
                      current_link.href = "#"; /* Bist du sicher, dass du hier nicht eine sinnvolle Adresse angeben möchtest? Oder läuft das ganze in einem abgesteckten Bereich, wo in jedem Fall JS vorausgesetzt werden kann? */  
                      
                      current_link.onclick = function() {  
                        open_customer("customeedit", KundeId); // Hier übergeben wir also die aktuelle Kunden–ID  
                      }  
                      
                      current_link.appendChild(document.createTextNode("Bearbeiten"));  
                      var Ausgabebereich = document.getElementById("item1");  
                      Ausgabebereich.appendChild(current_link);  
                      
                    }
                    

                    Einen schönen Donnerstag noch.

                    Gruß, Mathias

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                    [HTML Design Constraints: Logical Markup]
                    1. Hi,

                      current_link.onclick = function() {
                          open_customer("customeedit", KundeId); // Hier übergeben wir also die aktuelle Kunden–ID
                        }

                      Das dachte ich auch und habe dies auch vor dem Post getestet, aber das ergebns ist genau das gleiche.

                      Die # ist erstmal zum test da, bis der rest funktioniert :)

                      Habe das ganze mal hochgeladen http://www.fs-computers.com/test/?action=costumer

                      steffen

                    2. Hi,

                      Scheinst wohl auch keine Anung zu haben, wieso der Wert nicht übergeben wird?

                      mfg

                      1. Hallo steffen.

                        Scheinst wohl auch keine Anung zu haben, wieso der Wert nicht übergeben wird?

                        Ehrlich gesagt blicke ich in deinem Code–Wirrwarr kaum durch.

                        Was mir jedoch auffällt, ist folgendes:

                        document.getElementById("item1")[…]

                        Ein Element mit der ID „item1“ gibt es im Dokument nicht.

                        Einen schönen Freitag noch.

                        Gruß, Mathias

                        --
                        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                        [HTML Design Constraints: Logical Markup]
                        1. Hi Mathias,

                          doch das gibt es! Habe es komischerweise hinbekommen, indem ich

                          function create_link()
                          {
                          var Id=KundeId;
                          current_link = document.createElement("a");
                          current_link.href = "#";
                          current_link.onclick = function(){ open_costumer("costumeredit", Id); }
                          current_link.appendChild(document.createTextNode("Bearbeiten"));
                          var Ausgabebereich = document.getElementById("item1");
                          Ausgabebereich.appendChild(current_link);
                          }

                          gemacht habe. Ein direktes angeben von KundeID geht nicht. Sehr komisch, aber danke dir schonmal :)

                          Steffen

    2. Hallo Rouven.

      current_link.event.onclick = 'window.open("index.php?action=costumeredit&id=", "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no")';
      So, nun hast du einen Link, dessen onclick-Event mit einem String belegt ist - wenn das überhaupt zulässig ist, vielleicht kapituliert der Browser aber hier schon.

      Nein, möglich ist diese Schreibweise durchaus, nur mag sie der IE nicht verstehen.

      Zusätzlich kommt noch hinzu, dass die onclick–Eigenschaft bei obiger Schreibweise dem aus der Luft gegriffenen Unterobjekt „event“ zugewiesen wird. Damit kann diese Funktion nicht aktiv werden, wenn besagtes Ereignis eintritt.

      Die korrekte Zuweisung könnte z.B. so aussehen
      current_link.onclick = function() { window.open("index.php?action=costumeredit&id=", "Popupfenster", "width=555,height=444 ,resizable=no, toolbar=no, scrollbar=no"); }

      Ich bin mir gerade nicht sicher, ob es auch ohne das function() direkt mit window.open ginge, da bin ich überfragt.

      Nein, diese Wirkung ist praktisch nie gewünscht.

      Einen schönen Donnerstag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]