Marcel: Funktionsaufruf im Tag TABLE nicht möglich

Hallo zusammen,

ich versuche zur Zeit für ein Online Spiel eine mehr oder weniger brauchbare Hilfeseite mit Hilfe von PHP und Javascript zu erstellen. Leider begegnet mir immer das selbe Problem, welches ich hier mal mit einem eher sinnfreien Beispiel versuche zu beschreiben.

Beispiel:

Die Funktionen bunt(); liefern jeweils eine zufällige 6-stellige Hexadezimalzahl mit führendem #-Zeichen.

Mit PHP sehr noch recht einfach:
<table bgcolor="<?php bunt(); ?>">...</table>

stellt Selbiges mit Javascript ein Problem da:
<table bgcolor="bunt();">...</table>
oder: <table bgcolor="javascript:bunt();">...</table>
oder: <table bgcolor="+bunt();+">...</table>
oder: <table bgcolor="'bunt();'">...</table>

Mit keinem der dargestellten Varianten der Javascript-Funktion erhalte ich ein Ergebnis was wahrscheinlich daran liegt, dass der Aufruf der Funktion bunt() erst nach dem bzw. während des Aufbaus der  Seite geschieht.

Meine Frage hierzu: Wie kann ich das Problem umgehen?

  1. Hi

      
    <body onload="
    ~~~`document.getElementByID('testID').style.backgroundColor = bunt();`{:.language-java}~~~html
    ">  
    <table id="testID" style="background-color:#000000;">...
    

    Habs aber nicht getestet, könnte noch vielleicht noch n Fehler drin sein
    mfg
    Genie

  2. Hallo nochmal,

    Mit PHP sehr noch recht einfach:
    <table bgcolor="<?php bunt(); ?>">...</table>
    stellt Selbiges mit Javascript ein Problem da

    nein, keineswegs.

    <table bgcolor="bunt();">...</table>
    oder: <table bgcolor="javascript:bunt();">...</table>
    oder: <table bgcolor="+bunt();+">...</table>
    oder: <table bgcolor="'bunt();'">...</table>

    Nee, so geht's allerdings nicht; ein Javascript-Block kann nicht *innerhalb* eines Tags beginnen. Aber du kannst das gesamte Tag mit Javascript ausgeben lassen:

    <script type="text/javascript">
    document.write("<table bgcolor='#" + bunt() + "'>");
    </script>
    <noscript>
    <table>
    </noscript>

    Den noscript-Abschnitt würde ich unbedingt empfehlen, so dass Besucher mit deaktiviertem JS wenigstens etwas halbwegs Anständiges sehen. Die haben dann eben keine zufällige, sondern die Default-Farbe.

    Eine ganz andere Frage ist, warum du hier alte, missbilligte HTML-Attribute für die Darstellung verwenden willst, anstatt das ordentlich mit CSS zu regeln.

    Ciao,
     Martin

    --
    Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
    1. Eine ganz andere Frage ist, warum du hier alte, missbilligte HTML-Attribute für die Darstellung verwenden willst, anstatt das ordentlich mit CSS zu regeln.

      Hmm,... da muss ich gestehen, dass ich mir dahingehend noch keine großartigen Gedanken gemacht habe. Mir gehts zur Zeit mehr darum, mich erstmal im Umgang mit den Sprachen und ihren Eigenwilligkeiten zurecht zu finden und zu verbessern. Solang mach ich das dann doch noch nicht.

      Nun denn. Schönes Wochenende.

    2. Hello out there!

      <script type="text/javascript">
      document.write("<table bgcolor='#" + bunt() + "'>");
      </script>
      <noscript>
      <table>
      </noscript>

      Da sage noch einer, es gäbe in HTML keine Befehle.

      Du willst nicht etwa andeuten, dass

      <script type="text/javascript">  
        [code lang=javascript]document.write("<table bgcolor='#" + bunt() + "'>");
      

      </script>
      <noscript>
        <table>
      </noscript>
        <tr>
          <td>foo</td>
        </tr>
      </table>[/code]

      korrektes HTML wäre?

      Eine ganz andere Frage ist, warum du hier alte, missbilligte HTML-Attribute für die Darstellung verwenden willst, anstatt das ordentlich mit CSS zu regeln.

      Gute Frage. Zumal das mit JavaScript recht einfach ist, Style-Eigenschaften eines Elements zu ändern:

      document.getElementById("bunteTabelle").style.backgroundColor = bunt();

      Eine andere Frage ist, ob eine Tabelle hier angemessen ist ...

      See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      1. Hallo Gunnar,

        Da sage noch einer, es gäbe in HTML keine Befehle.

        ;-)

        Du willst nicht etwa andeuten, dass

        <script type="text/javascript">

        [code lang=javascript]document.write("<table bgcolor='#" + bunt() + "'>");

        
        > </script>  
        > <noscript>  
        >   <table>  
        > </noscript>  
        >   <tr>  
        >     <td>foo</td>  
        >   </tr>  
        > </table>[/code]  
        > korrektes HTML wäre?  
          
        Der Roh-Quelltext nicht, so wie ihn der Validator sieht und beurteilt. Der im Browser intern erzeugte ("generated source") dagegen schon, und zwar unabhängig davon, ob JS aktiviert ist oder nicht.  
        Das ist sowas in der Art wie "Herr Wachtmeister, ich \*habe\* einen Führerschein, könnse nachprüfen, ich hab ihn nur gerade nicht bei mir".  
          
        
        > Eine andere Frage ist, ob eine Tabelle hier angemessen ist ...  
          
        Eine gute Frage. So weit habe ich gar nicht gedacht.  
          
        Schönen Abend,  
         Martin  
        
        -- 
        Realität ist eine Illusion, die durch Unterversorgung des Körpers mit Alkohol entstehen kann.