FireGlow: setAttribut

Moin!

Ich muss dynmaisch den onClick-Event eines Buttons verändern.

Dankbarerweise gibts ja dafür folgendes:

out.println("document.getElementById(TD + '_Button').setAttribute("onClick", "addPicture('"+TD+"', '"+nummer+"');");");

Jedoch klappt das nicht im IE, wie issen da der Befehl für?

Gruß

FireGlow

  1. Hallo FireGlow.

    Ich muss dynmaisch den onClick-Event eines Buttons verändern.

    Dankbarerweise gibts ja dafür folgendes:

    out.println("document.getElementById(TD + '_Button').setAttribute("onClick", "addPicture('"+TD+"', '"+nummer+"');");");

    Was ist „out.println“ und was hat es mit JavaScript zu tun?

    Jedoch klappt das nicht im IE, wie issen da der Befehl für?

    Du musst die direkte Variante nehmen:

    buttonobject.onclick = function() {  
      addPicture(wie, auchimmer);  
    };
    

    Funktioniert in allen Browsern gleich, setAttribute ist also überflüssig.

    Einen schönen Dienstag noch.

    Gruß, Ashura

    --
    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. Was ist „out.println“ und was hat es mit JavaScript zu tun?

      Ist noch in Java implementiert, habs mit gepostet, da ich ja auch einfach nen Zeichenfehler drin haben koennte.

      Du musst die direkte Variante nehmen:

      buttonobject.onclick = function() {

      addPicture(wie, auchimmer);
      };

      
      >   
        
      Funktioniert nämlich eben nicht. Teste es aber gerne nochmal.  
        
      Gruß  
        
      FireGlow
      
      1. Hallo,

        Funktioniert nämlich eben nicht. Teste es aber gerne nochmal.

        dann poste doch mal das (nichtfunktionierende) Beispiel.

        Grüsse

        Cyx23

        1. dann poste doch mal das (nichtfunktionierende) Beispiel.

          Passt nun, danke.

      2. Hallo FireGlow.

        Du musst die direkte Variante nehmen:

        buttonobject.onclick = function() {

        addPicture(wie, auchimmer);
        };

        
        > >   
        >   
        > Funktioniert nämlich eben nicht. Teste es aber gerne nochmal.  
          
        [\[quote:#186](http://community.de.selfhtml.org/my/zitatesammlung/zitat186)]  
          
          
        Einen schönen Dienstag noch.  
          
        Gruß, Ashura  
        
        -- 
        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](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
        
  2. Hi FireGlow!

    Ich kenn zwar die setzen Richtung nicht auswendig, aber vielleicht hilft die das (ist die get Richtung):
    if (navigator.appName.search(/Microsoft Internet Explorer/)!=-1)
     theClass=myCol.getAttributeNode("class").value;
    else
     theClass=myCol.getAttribute("class");

    Muss sich ja dann ummodeln lassen.

    Greets,
    Richard

    1. Hallo Richard,

      if (navigator.appName.search(/Microsoft Internet Explorer/)!=-1)

      Ist eine Browsererkennung durch JavaScript per navigator.appName angesichts der Möglichkeiten
      z.B. von Opera nicht etwas unsicher?

      Grüsse

      Cyx23

    2. Hi,

      if (navigator.appName.search(/Microsoft Internet Explorer/)!=-1)

      1. Die Browserweiche ist hier absolut überflüssig.
      2. Wenn schon Browserweiche, dann eine bessere (*jede* der möglichen ist besser als eine navigator-Abfrage =;-))
      3. Beim class-Attribut sollte man (wg. IE-Problemen) einfach direkt className verwenden!
      4. Das Beispiel hat nichts mit dem Eventhandling zu tun. Das geht anders.

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. Hallo,

    Jedoch klappt das nicht im IE,

    du kannst ja mal in der Richtung etwas versuchen:

      
    window.onload=function(){  
    document.getElementById("test").onclick=function(){alert(0)};  
    }  
    
    

    Grüsse
    Cyx23

    1. Hi

      document.getElementById("test").onclick=function(){alert(0)};

      Was ist eigentlich der Unterschied zwischen
      document.getElementById("test").onclick=function(){alert(0)};
      und
      document.getElementById("test").onclick="alert(0)";
      ?

      mfg
      Genie

      1. Hi,

        document.getElementById("test").onclick=function(){alert(0)};
        Was ist eigentlich der Unterschied zwischen
        document.getElementById("test").onclick=function(){alert(0)};
        und
        document.getElementById("test").onclick="alert(0)";
        ?

        Mal abgesehen davon, dass "alert(0)" ein String und keine Funktion ist ...
        Das "Problem" ist, dass du beim Registrieren eines Event Handlers keine Parameter angeben darfst/sollst/wie auch immer. Daher musst du eine parameterfreie anonyme Funktion schreiben, die dann dein alert aufruft.
        Angenommen, du hättest die Funktion "gibFehlerAus()" so definiert:

          
        function gibFehlerAus()  
        {  
           alert('Fehler!');  
        }  
        
        ~~~dann wäre die korrekte Zuweisung  
        `document.getElementById("test").onclick=gibFehlerAus;`{:.language-JavaScript}  
          
        Der Yeti
        
        -- 
        Habe nun, ach! [WInfo](http://www.informatik.uni-koeln.de/winfo/), BWL, und Mathe, Und leider auch Info!  
        Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!  
        Und bin so klug als wie zuvor!  
          
        [sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:\[ zu:) fl:| ss:) ls:< js:|](http://community.de.selfhtml.org/fanprojekte/selfcode.htm)
        
        1. Hi

          Mal abgesehen davon, dass "alert(0)" ein String und keine Funktion ist ...

          Ja, aber
          <button onClick="alert('Wasweißich')">
                          ^^^^^^^^^^^^^^^^^^^^^
          doch auch.

          Das "Problem" ist, dass du beim Registrieren eines Event Handlers keine Parameter angeben darfst/sollst/wie auch immer. Daher musst du eine parameterfreie anonyme Funktion schreiben, die dann dein alert aufruft.
          Angenommen, du hättest die Funktion "gibFehlerAus()" so definiert:

          function gibFehlerAus()
          {
             alert('Fehler!');
          }

          
          > `document.getElementById("test").onclick=gibFehlerAus;`{:.language-JavaScript}  
          
          Ah, danke, jez hab ichs!  
          mfg  
          Genie  
            
          
          -- 
          [Selfcode: ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:{ ss:) de:\[ js:| ch:| sh:( mo:} zu:) ](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%7B+ss%3A%29+de%3A%5B+js%3A%7C+ch%3A%7C+sh%3A%28+mo%3A%7D+zu%3A%29)  
          [Der Internet Explorer ist scheiße](http://web.oesterchat.com/internet-explorer/)  
          [Wie ist meine IP-Adresse?](http://www.wieistmeineip.de/cometo/)
          
          1. Hi,

            Ja, aber
            <button onClick="alert('Wasweißich')">
                            ^^^^^^^^^^^^^^^^^^^^^
            doch auch.

            Nein, das ist ein Attribut des button-Elements und das muss in Anführungszeichen eingeschlossen werden. Aber wenn du den onclick-Handler rein in JavaScript registrierst, musst du die Funktion angeben und zwar nicht als String. (Warum das so ist, sprengt mein Verständnis von den "Innereien" von JavaScript, könnte man sicherlich auch beides implementieren.)

            Ah, danke, jez hab ichs!

            Super.

            Der Yeti

            --
            Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
            Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
            Und bin so klug als wie zuvor!
            sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
            1. Hallo,

              Ja, aber
              <button onClick="alert('Wasweißich')">
                              ^^^^^^^^^^^^^^^^^^^^^
              [geht] doch auch.

              Nein, das ist ein Attribut des button-Elements und das muss in Anführungszeichen eingeschlossen werden. Aber wenn du den onclick-Handler rein in JavaScript registrierst, musst du die Funktion angeben und zwar nicht als String. (Warum das so ist, sprengt mein Verständnis von den "Innereien" von JavaScript, könnte man sicherlich auch beides implementieren.)

              Vielleicht zur Ergänzung:

              Prinzipiell kann man durchaus

              element.setAttribute("onclick", "func('param')");

              schreiben.

              (Das ist, wie Ashura dargelegt hat, etwas ganz anderes als: element.onclick = func("param");)

              Das sollte jeder standardkonforme Browser verstehen: Man setzt ganz einfach über das DOM ein Attribut namens onclick. Als ob es im HTML-Code schon drinstünde.

              Die Kurzschreibweise element.onclick = "func('param')"; ist hingegen in DOM 2 HTML nicht vorgesehen, weil man dort von DOM Events zum Registrieren von Event-Handlern ausgeht.)

              Das Problem ist, dass eben nicht alle Browser standardkonform sind - wenn ich es recht in der Erinnerung habe, versteht IE als einziger Browser das nicht.

              Der IE will die klassische Methode zum Registrieren von Event-Handlern, die Netscape mal erfunden hat, als es das W3C-DOM noch längst nicht gab, nämlich gemäß dem Schema:

              element.onevent = func;

              Wenn man also Parameter übergeben will, wie man es mit einem onclick-Attribut machen kann, dann nimmt man die ebenfalls angesprochene Methode: »Über die Kapselung in anonymen Funktionen können Parameter übergeben werden.«

              Das heißt dann z.B.

              element.onclick = function () {  
                 func("param");  
              };
              

              Mathias

        2. Hallo Yeti.

          Das "Problem" ist, dass du beim Registrieren eines Event Handlers keine Parameter angeben darfst/sollst/wie auch immer.

          Nein, das stimmt nicht. Über die Kapselung in anonymen Funktionen können Parameter übergeben werden. Das Problem ist ein anderes:

          function shout(what) {  
            alert(what);  
          }  
            
          document.getElementById('test').onclick = shout('Hello');
          

          Was passiert hier? Die Funktion „shout“ wird sofort aufgerufen und ihr Rückgabewert wird der onclick–Eigenschaft des Objektes zugewiesen.

          function shout(what) {  
            alert(what);  
            return 'World';  
          }  
            
          document.getElementById('test').onclick = shout('Hello');
          

          Hier wird nun augenblicklich die übergebene Zeichenkette ausgegeben. Lässt man sich nun einmal den Inhalt der onclick–Eigenschaft ausgeben, sieht man einen Funktionskörper und obigen Rückgabewert als einzigen Inhalt. Gibt man keinen Rückgabewert an, ist er logischerweise „undefined“.

          Einen schönen Dienstag noch.

          Gruß, Ashura

          --
          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]