Björn: Style funzt nicht

Hallo Leute,

ich bin noch ganz neu, sorry, falls ich mir hier etwas umständlich ausdrücke...

Also ich habe folgendes getan: Ich habe eine Tabelle (DataGrid) die mit mouseover und mouseout entsprechend die Backgroundcolor ändert. Alles schick. Beim onclick wir die Seite komplett neu geladen. Ich wollte mir gern merken, wo ich geklickt habe, damit ich dieser Row eine neue Farbe zuweisen kann. In diversen Foren habe ich gelesen, dass das mit window.name funzt. Also habe ich den RowIndex ausgelesen, in window.name gespeichert. Das geht auch super, selbst wenn ich auf weiterführende Seiten gehe, und wieder zurück komme, ist diese Variable immer noch besetzt.
Nun zum Problem. Ich weiß ja, welche Zeile ich geklickt habe. Allerdings kann ich dieser keinen style zuweisen. Er sagt immer, dass this null oder kein object ist.

Hier der Code...

<script language="JavaScript" runat="server">
            storeid = window.name; //hier wird die RowID gehalten

function doit()
            {
               if (storeid!=null)
                {
                this.rowIndex = storeid;
                //alert(this + this.rowIndex);
                //this.style.font = 'bold';  // diese Zuweisung bringt mir den Fehler, dass style null ist oder kein object

}
                else
                {
                this.rowIndex = 0;
                }
            }

if(window.onload)
            {
                var temp = window.onload;
                window.onload=function(e)
                {{
                    temp(e);
                    doit();
                };
            }
            else
            {
                window.onload=function(e)
                {
                    doit();
                };
            }

function store (row) //wird beim onclick-event aufgerufen
            {
            storeid = row.rowIndex;
            window.name = storeid;
            }

function portalDG_bold(row) //onclick-event
            {
                    row.style.fontWeight = 'bold';
                    row.style.backgroundColor = 'orange';
            }

var lastColorUsed;
            function portalDG_changeBackColor(row, highlight, action)
           //onmouseover und onmouseout-Events
            {
              if (highlight)
              {
                lastColorUsed = row.style.backgroundColor;
                row.style.backgroundColor = 'orange';
              }
              else
                row.style.backgroundColor = lastColorUsed;
            }
            -->
            </script>";

Ich freue mich über eure Ratschläge und Hilfen.

Vielen Dank

Björn

  1. Hallo,

    this verweist je nach Kontext auch auf "window". Da gibst Trickse, die hier auf SELFHTML auch beschrieben werden von Mathias Schäfer.

    Wieso hantierst du nicht mit my_cell = document.getElementById(storedId) ?

    Und my_cell.style.backgroundColor = #abc;

    my_cell.style.fontWeight übrigens, das "weight" hattest du unten vergessen, bzw. oben.

    Gruß

    jobo

  2. <script language="JavaScript" runat="server">

    Was hat das zu bedeuten? Arbeitest du mit serverseitigem JavaScript??
    Doch wohl nicht?

    storeid = window.name; //hier wird die RowID gehalten

    function doit()
                {
                   if (storeid!=null)
                    {
                    this.rowIndex = storeid;
                    //alert(this + this.rowIndex);
                    //this.style.font = 'bold';  // diese Zuweisung bringt mir den Fehler, dass style null ist oder kein object

    this zeigt auf das Objekt, in dessen Kontext die jeweilige Funktion aufgerufen wurde.

    Wenn du einfach doit() notierst, dann zeigt this in der Funktion doit auf das globale Objekt window.

    window hat keine style-Eigenschaft.

    Eine style-Eigenschaft haben nur Elementobjekte. Wenn du Element formatieren willst, musst du es zuvor ansprechen. Wenn du den rowIndex hast, musst du dir das zugehörige Element anhand dessen heraussuchen.

    Zum Beispiel, indem du das table-Element über eine ID ansprichst

    document.getElementById("meineTabelle")

    und davon ausgehend in der rows-Liste mit dem gespeicherten Index suchst:

    var trElement = document.getElementById("meineTabelle").rows[ storeid ];

    Jetzt hast du ein tr-Element und kannst es formatieren:

    trElement.style.fontWeight = "bold";

    oder eine Klasse vergeben

    trElement.className = "hervorgehoben";

    Mathias

  3. @@Björn:

    nuqneH

    <script language="JavaScript" runat="server">

    'type'-Attribut http://de.selfhtml.org/javascript/intro.htm#javascriptbereiche@title=fehlt; 'language' und 'runat' in die Mülltonne.

    -->
                </script>";

    Du willst einen HTML-Kommentar schließen, der gar nicht geöffnet wurde?

    Und nein, die Auskommentierung von JavaScript-Code (wie auch CSS-Code) ist unsinnig.

    Und was soll '";' da hinter dem </script>-Tag?

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)
    1. Danke Euch allen für die wertvollen Tipps...

      Ja es ist serverseitg... Die Tabelle wird in einer aspx aufgebaut. Hier habe ich leider keine ElementID (oder doch?)

      Ich hab schon andere (sinnvollere) Sachen ausprobiert, Session, Viewstate, funzt aber alles nicht so, wie ich es will.

      Das this auf das window zeigt, viel mir heute Nacht dann auch noch ein...

      Ich werd mal weiter probieren...

      Danke nochmal an Euch...