Cypog: Hintergrundbild ändern

Hallo,
ich habe versucht eine Funktion zu bauen, die das Hintergrundbild einer Zelle beim darüberfahren ändert:

function ChangeBackground(name)
{
 document.getElementById(name).background = "img/button2.jpg";
}

Das funktioniert nicht, obwohl das Ändern der Zellenhöhe funktioniert hat.
Die Fehlerkonsole gibt auch keine Fehler aus.

Weiß jemand, woran das liegen kann?

  1. @@Cypog:

    document.getElementById(name).background = "img/button2.jpg";

    Das funktioniert nicht, obwohl das Ändern der Zellenhöhe funktioniert hat.

    Und wie hat das funktioniert? Mit dem 'style'-Objekt etwa? ;-)

    Die Fehlerkonsole gibt auch keine Fehler aus.
    Weiß jemand, woran das liegen kann?

    Weil weder Syntax- noch Laufzeitfehler vorliegt.

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
    1. Und wie hat das funktioniert? Mit dem 'style'-Objekt etwa? ;-)

      Na mit document.getElementById(name).height = 50;

      1. @@Cypog:

        Und wie hat das funktioniert? Mit dem 'style'-Objekt etwa? ;-)
        Na mit document.getElementById(name).height = 50;

        Was einem HTML-Attribut entspricht. Das HTML-Attribut 'background' gibt es in HTML 4.01 Transitional nur für das 'body'-Element; und es ist missbilligt.

        Live long and prosper,
        Gunnar

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
        1. @@Cypog:

          Und wie hat das funktioniert? Mit dem 'style'-Objekt etwa? ;-)
          Na mit document.getElementById(name).height = 50;

          Was einem HTML-Attribut entspricht. Das HTML-Attribut 'background' gibt es in HTML 4.01 Transitional nur für das 'body'-Element; und es ist missbilligt.

          Welche Vorteile hat das?
          Diese Variante erscheint mir sehr viel komplizierter.

          1. @@Cypog:

            Welche Vorteile hat das?
            Diese Variante erscheint mir sehr viel komplizierter.

            Was meinst du mit "dieser Variante"? Das 'style'-Objekt?

            Nun, es hat den Vorteil, dass du damit alle CSS-Eigenschaften dynamisch setzen kannst, nicht nur ein paar rudimentäre Darstellungsangaben, die in HTML 4.01 Transitional vorhanden sind.*

            Live long and prosper,
            Gunnar

            * nicht in Strict, weil sie in HTML nichts zu suchen haben

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Das brauch ich ja überhaupt nicht. Wenn es auf die eine einfachere Weise funktioniert, wieso sollte ich es auf die andere komplizierte machen?
              Nur, weil es "missbiligt" ist? Und was meinst du eigentlich mit "hat hier nichts zu suchen"?

              1. Das brauch ich ja überhaupt nicht. Wenn es auf die eine einfachere Weise funktioniert, wieso sollte ich es auf die andere komplizierte machen?
                Nur, weil es "missbiligt" ist? Und was meinst du eigentlich mit "hat hier nichts zu suchen"?

                Hm. So langsam glaub ich wirklich, du trollst hier nur etwas rum.

                1. Ich hab das übrigens jetzt so gelöst, wie ihr mir das vorgeschlagen habt, klappt auch wunderbar, aber ich möchte jetzt nicht alle "missbilligten" background Attribute entfernen und durch viel länge style Attribute ersetzen.

                  Das brauch ich ja überhaupt nicht. Wenn es auf die eine einfachere Weise funktioniert, wieso sollte ich es auf die andere komplizierte machen?
                  Nur, weil es "missbiligt" ist? Und was meinst du eigentlich mit "hat hier nichts zu suchen"?

                  Hm. So langsam glaub ich wirklich, du trollst hier nur etwas rum.

                  Nein, darauf suche ich schon immer eine Antwort, aber bisher war keiner fähig sie mir zu beantworten.

                  Hey, und ich hab sogar ne neue technische Frage:

                  Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                  1. Yerf!

                    Nein, darauf suche ich schon immer eine Antwort, aber bisher war keiner fähig sie mir zu beantworten.

                    HTML soll ein Dokument inhaltlich strukturieren. Die Attribute zur beeinflussung der Darstellung waren ein Irrweg zu Zeiten von HTML3. Dies versucht man nun eben zu bereinigen. Für die Darstellung sollte nur CSS (und damit in JavaScript das .style) zum Einsatz kommen.

                    Rein Praktisch hat das in JS noch den Vorteil, dass alle Darstellungsangelegenheiten einheitlich über den gleichen Weg gelöst werden (also immer über .style). Außerdem bietet .style.width mehr Möglichkeiten, z.B. die Angabe des Wertes in "em" (also abhängig von der Schriftgröße).

                    Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                    So wie man in JS eben mehrere Befehle ausführt: mittels ";" trennen.

                    Gruß,

                    Harlequin

                    --
                    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
                    1. Yerf!

                      Nein, darauf suche ich schon immer eine Antwort, aber bisher war keiner fähig sie mir zu beantworten.

                      HTML soll ein Dokument inhaltlich strukturieren. Die Attribute zur beeinflussung der Darstellung waren ein Irrweg zu Zeiten von HTML3. Dies versucht man nun eben zu bereinigen. Für die Darstellung sollte nur CSS (und damit in JavaScript das .style) zum Einsatz kommen.

                      Rein Praktisch hat das in JS noch den Vorteil, dass alle Darstellungsangelegenheiten einheitlich über den gleichen Weg gelöst werden (also immer über .style). Außerdem bietet .style.width mehr Möglichkeiten, z.B. die Angabe des Wertes in "em" (also abhängig von der Schriftgröße).

                      »»

                      Danke, endlich hat mir jemand wirklich erklärt, wieso man CSS verwenden sollte statt Attribute.

                      Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                      So wie man in JS eben mehrere Befehle ausführt: mittels ";" trennen.

                      Gruß,

                      Harlequin

                      Ok, vielen Dank für die schnelle Antwort.

                      Schöne Grüße

                      Cypog

                    2. Hallo,

                      Für die Darstellung sollte nur CSS (und damit in JavaScript das .style) zum Einsatz kommen.

                      Auch aus dem JavaScript kann und sollte man direkte Style-Angaben heraushalten und ins Stylesheet legen. Wenn sich der Status eines Elementes ändert und deshalb eine andere Formatierung nötig ist, vergibt man z.B. eine dem Status entsprechende Klasse über das className-Attribut. Ausnahmen, bei denen man direkt die Inline-Styles mit JavaScript setzen muss, bestätigen natürlich die Regel.

                      Mathias

                  2. @@Cypog:

                    Hm. So langsam glaub ich wirklich, du trollst hier nur etwas rum.

                    Nein, darauf suche ich schon immer eine Antwort, aber bisher war keiner fähig sie mir zu beantworten.

                    Hä??

                    So langsam schließe ich mich Steels Einschätzung an.

                    Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                    Warum fragst du das nicht Google?

                    Live long and prosper,
                    Gunnar

                    --
                    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                    1. @@Cypog:

                      Hm. So langsam glaub ich wirklich, du trollst hier nur etwas rum.

                      Nein, darauf suche ich schon immer eine Antwort, aber bisher war keiner fähig sie mir zu beantworten.

                      Hä??

                      So langsam schließe ich mich Steels Einschätzung an.

                      Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                      Warum fragst du das nicht Google?

                      Live long and prosper,
                      Gunnar

                      Ne, schau dir mal  Harlequin Beitrag an, er konnte mir wirklich eine Antwort geben.

                      Schöne Grüße

                      Cypog

                      1. @@Cypog:

                        Wie kann man mehrere Funktionen mit einem Event-handler aufrufen?

                        Warum fragst du das nicht Google?

                        Ne, schau dir mal  Harlequin Beitrag an, er konnte mir wirklich eine Antwort geben.

                        Ne, ich wollte dir die Chance geben, mal drüber nachzudenken, wie man Informationen SELF findet. Du willst doch nicht ewig ein Kleinkind bleiben, sondern auch mal erwachsen werden, oder?

                        Schon die Eingabe der von dir verwendeten Phrase "mehrere Funktionen mit einem Event-handler aufrufen" in Google hätte deine Frage beantwortet.

                        Also nochmal: Warum hast du das nicht Google gefragt?

                        Live long and prosper,
                        Gunnar

                        --
                        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                        1. Ne, ich wollte dir die Chance geben, mal drüber nachzudenken, wie man Informationen SELF findet. Du willst doch nicht ewig ein Kleinkind bleiben, sondern auch mal erwachsen werden, oder?

                          Keine Sorge, ich weiß, wie man Informationen selber findet, ich habe bereits eine Programmiersprache(pawn) erlernt ohne jemals gefragt zu haben.
                          Ich wollte es einfach mal auf diese Weise versuchen.

                          Schon die Eingabe der von dir verwendeten Phrase "mehrere Funktionen mit einem Event-handler aufrufen" in Google hätte deine Frage beantwortet.

                          Also nochmal: Warum hast du das nicht Google gefragt?

                          Eigentlich habe ich diese Frage nur gestellt, um nicht vom Thema abzuweichen und den Zweck dieses Threads nicht zu entfremden.

                          Schöne Grüße

                          Cypog

                  3. Hi!

                    Harlequin hat ja nun Deine Fragen hoffentlich ausfuehrlich beantwortet.

                    Wenn das hier kein Getrolle ist, dann bist du, entschuldige bitte, ein wirklich schwieriger Kandidat.

                    Das Problem dabei ist nicht, dass Du lauter Fragen stellst, sondern dass du scheinbar nicht zufrieden mit den Antworten bist und diese, obwohl korrekt, in Frage stellst. Mag auch daran liegen, dass Du dich nicht klar ausdrueckst. Ich versteh jedenfalls nicht, was daran kompliziert sein soll, dem Styleobjekt CSS Anweisungen zu verpassen.

                    Auch dass 'bisher niemand deine Frage beantworten konnte' (Welche Frage genau, bleibt ja eigentlich nur zu erraten), ist merkwuerdig. Im Web findet man (z.B. hier) haufenweise Informationen zur Trennung von Darstellung und Inhalten.

                    Entschuldige also, wenn ich einen Troll vermute(te), aber du erweckst nunmal irgendwie den Anschein.

                    1. Ja, ich bin schwierig, da ich meistens nicht nur auf "Wie?" eine Antwort wissen will, sondern auch auf "Warum?"

                      Genau so eine Antwort, wie die von Harlequin wollte ich hören.

                      Schöne Grüße

                      Cypog

                      1. Hi!

                        Hm. Ich fand eher das Schwierige, daruf zu kommen dir soetwas zu schreiben, wie Harlequin es tat. Warum zu fragen is nicht schwierig. Das macht Sinn.

                        Harlequin hat wohl empathische Faehigkeiten, die besser ausgepraegt sind, als meine. (Obwohl ich grad das gleiche wie Harlequin posten wollte)

              2. @@Cypog:

                Wenn es auf die eine einfachere Weise funktioniert, wieso sollte ich es auf die andere komplizierte machen?

                Ich hab keine Vorstellung, was für dich welche "Variante" oder "Weise" ist. Ach nicht, welche für dich die "einfache" und welche die "komplizierte" sein soll. Bitte drücke dich verständlich aus.

                [...] wieso sollte ich es auf die andere komplizierte machen? Nur, weil es "missbiligt" ist?

                Etwas Missbilligets sollten man eben NICHT machen.

                Und was meinst du eigentlich mit "hat hier nichts zu suchen"?

                Darstellungsangaben. Die haben in HTML nichts zu suchen.

                Live long and prosper,
                Gunnar

                --
                „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                1. @@Cypog:

                  Wenn es auf die eine einfachere Weise funktioniert, wieso sollte ich es auf die andere komplizierte machen?

                  Ich hab keine Vorstellung, was für dich welche "Variante" oder "Weise" ist. Ach nicht, welche für dich die "einfache" und welche die "komplizierte" sein soll. Bitte drücke dich verständlich aus.

                  style='background-image:url(img/button.jpg);' ist eindeutig komplizierter als
                  background='img/button.jpg'

                  [...] wieso sollte ich es auf die andere komplizierte machen? Nur, weil es "missbiligt" ist?

                  Etwas Missbilligets sollten man eben NICHT machen.

                  Warum nicht? Warum ist es überhaupt missbilligt und was hat das für Auswirkungen?

                  Und was meinst du eigentlich mit "hat hier nichts zu suchen"?

                  Darstellungsangaben. Die haben in HTML nichts zu suchen.

                  Ich meinte damit eher die Aussage, die dahinter steht.

                  Schöne Grüße

                  Cypog

                  1. [latex]Mae  govannen![/latex]

                    Ich hab keine Vorstellung, was für dich welche "Variante" oder "Weise" ist. Ach nicht, welche für dich die "einfache" und welche die "komplizierte" sein soll. Bitte drücke dich verständlich aus.

                    style='background-image:url(img/button.jpg);' ist eindeutig komplizierter als
                    background='img/button.jpg'

                    *Kopfschüttel* Wie wäre es, den gegebenen Tipps (hier insbesondere Gunnars Hinweis) mal lesend zu folgen?

                    Cü,

                    Kai

                    --
                    Some things in life are bad, they can really make you mad
                    Other things just make you swear and curse.
                    When you're chewing on life's gristle, don't grumble, give a whistle
                    And this'll help things turn out for the best...
                    ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|]
                  2. @@Cypog:

                    style='background-image:url(img/button.jpg);' ist eindeutig komplizierter als
                    background='img/button.jpg'

                    Von 'style'-Attributen war auch nicht die Rede.

                    Darstellungsangaben haben in HTML nichts zu suchen. Sagte ich das noch nicht?

                    Das gilt auch für derartige Inline-Style-Angaben. 'style'-Attribute sind böse[tm].

                    Sämtliche CSS-Angaben sollten zentral notiert sein: in einem externen Stylesheet oder im 'style'-Element im 'head'.

                    Warum ist es überhaupt missbilligt [...]?

                    Darstellungsangaben haben in HTML nichts zu suchen. Sagte ich das noch nicht?

                    Für Darstellungsangaben ist CSS da.

                    Live long and prosper,
                    Gunnar

                    --
                    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
  2. Hi!

    Das funktioniert nicht, obwohl das Ändern der Zellenhöhe funktioniert hat.

    Hat es? Ohne Style Objekt?

    Die Fehlerkonsole gibt auch keine Fehler aus.

    klar, du schriebst ja auch einen String in eine Eigenschaft. (die es so nicht geben sollte) Daran kann ja erstmal nichts falsch sein.

    Benutz das http://de.selfhtml.org/javascript/objekte/style.htm@title=Styleobjekt. Und wenn es immer noch nicht geht, schau DIr doch mal an, wie man mit <http://de.selfhtml.org/css/eigenschaften/hintergrund.htm#background_image@title=CSS Hintergrundbilder> definiert.

  3. Hallo,

    ich habe versucht eine Funktion zu bauen, die das Hintergrundbild einer Zelle beim darüberfahren ändert:

    function ChangeBackground(name)
    {
    document.getElementById(name).background = "img/button2.jpg";
    }

    Das funktioniert nicht, obwohl das Ändern der Zellenhöhe funktioniert hat.
    Die Fehlerkonsole gibt auch keine Fehler aus.

    Erstmal: Ein background-Attribut beim td-Element gibts gemäß HTML 4 nicht, auch wenn es die Browser aus historischen Gründen kennen. Deshalb ist im HTML-DOM jedenfalls keine Objekteigenschaft namens background definiert.

    Das führt dazu, dass Browser es zwar im HTML umsetzen, aber nicht, wenn man die background-Eigenschaft im JavaScript setzt. Weil das nirgends definiert ist, dass es funktionieren muss. IE macht das zwar, Opera, Firefox und Konqueror nicht.

    Was browserübergreifend funktionieren würde, wäre setAttribute("background", "img/button2.jpg"). Aber dann kanns du auch gleich style.background setzen.

    Wobei style.http://de.selfhtml.org/css/eigenschaften/hintergrund.htm#background@title=background nochmal etwas anderes ist. Es ist eine zusammenfassende Eigenschaft für mehrere CSS-Eigenschaften den Hintergrund betreffend. Damit hast du auch einfach mehr Möglichkeiten.

    Wenn du die nicht nutzt, dann ist es natürlich Schnuppe, dann kannst du bei setAttribute bleiben. Attribute setzen ist aber etwas ganz anderes als Inline-Styles setzen. Mit Inline-Styles kannst du Regeln aus dem Stylesheet überschreiben, weil die sich http://de.selfhtml.org/css/formate/kaskade.htm@title=vererben. Die ganzen veralteten Attribut fallen da einfach heraus.

    Besser ist es wie gesagt ohnehin, wenn möglich Style-Angaben auch aus dem JavaScript herauszuhalten. Es ist sinnvoller, du setzt die Klasse:

      
    document.getElementById(name).className = "hervorgehoben";
    

    Im zentralen Stylesheet hast du dann alle Formatierungen im Griff. Da stünde dann z.B. solche Regel:

    td.hervorgehoben { background-image:url(img/button2.jpg); }

    Wenn ich das Ziel richtig verstanden habe (Hintergrundwechsel beim Mouseover), dann ist auch reines CSS dafür ausreichend, dann brauchst du JavaScript nicht unbedingt:

    #zelle[ref:self812;css/eigenschaften/pseudoformate.htm#link_visited_focus_hover_active@title=:hover] { background-image:url(img/button2.jpg); }

    Allerdings kann das IE < 7 nicht.

    Mathias