mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 03:13 Benutzername: Passwort: Auto-Login

Thema: JS - Wieso funkt folgender Code nicht? vom 02.11.2012


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> JS - Wieso funkt folgender Code nicht?
Autor Nachricht
tellric
Threadersteller

Dabei seit: 27.03.2012
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Fr 02.11.2012 19:09
Titel

JS - Wieso funkt folgender Code nicht?

Antworten mit Zitat Zum Seitenanfang

Hallo,

ich bin gerade dabei mir JavaScript beizubringen. Ich habe in meinem HTML-Dokument ein div. Dieses hat eine bestimmt Farbe. Wenn ich darauf klicke, dann soll es seine Farbe ändern. Folgender Code funktioniert:


window.onload = clickhandler;

function colorChange(){
document.getElementById("container").style.backgroundColor = "#CCC";
}

function clickhandler(){
document.getElementById("container").onclick = colorChange;
}


Meine Frage ist nun: Wieso funktioniert folgender Code nicht? Zu allererst würde mich interessieren, wieso dieser Code nicht funktioniert - ich will es einfach nur verstehen. Wie er richtig lautet ist zweitrangig, aber würde mich natürlich auch interessieren!
Dieser zweite Code soll es mir ermöglichen, dass ich immer wieder auf das div klicken kann wobei sich dann die Farbe immer wieder ändert.


window.onload = clickhandler;

function colorChange(){
if(document.getElementById("container").style.backgroundColor == "#F39"){
document.getElementById("container").style.backgroundColor = "#CCC";
}
else{
document.getElementById("container").style.backgroundColor = "#F39";
}
}


function clickhandler(){
document.getElementById("container").onclick = colorChange;
}

Tut mir leid - das mit dem Code-Einfügen funkt leider nicht ganz. Ich hoffe, er ist auch so verständlich.


Vielen Dank und Gruß
tellric
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Fr 02.11.2012 19:11
Titel

Antworten mit Zitat Zum Seitenanfang

Wo ein Programm fehlschlägt, sagt Dir präzise die Javascript-Fehlerkonsole. Oder die der Entwicklertools resp. Firebug.

Gleich mal angemerkt - besonders gut ist der Code auch nicht. colorChange() ist nicht wiederverwendbar, weil Du die ID in der Fubnktion festverdrahtest, obwohl die im Aufrufkontext doch eigentlich bekannt ist. Auch die andauernde Neu-Referenzierung über getElementById() ist schlechter Stil. Besser wäre, den DOM-Node einer Variablen zuzuweisen.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
tellric
Threadersteller

Dabei seit: 27.03.2012
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Fr 02.11.2012 19:28
Titel

Antworten mit Zitat Zum Seitenanfang

Wie meinst du das mit dem: Fest verdrahten der Funktion?

Und wie könnte ich das anders machen?

Wenn ich den DOM-Node einer Variablen zuweise:

window.onload = clickhandler;

var myDiv = document.getElementById("container");

function colorChange(){
myDivstyle.backgroundColor = "#CCC";
}


function clickhandler(){
myDivonclick = colorChange;
}



und dann mit diesem weiterarbeite, dann rührt sich leider gar nichts mehr.
Nicht mal mehr bei dem jetzt noch funktionierenden Code.

Vielen Dank für die schnelle Antwort!


Zuletzt bearbeitet von tellric am Fr 02.11.2012 19:30, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Fr 02.11.2012 19:52
Titel

Antworten mit Zitat Zum Seitenanfang

myDivstyle/myDivonclick und myDiv.style/myDiv.onclick sind auch nicht dasselbe.
Und obwohl das ansonsten so über Closures funktionieren würde, empfehle ich Dir, Dich mal mit der Sprache eingehend zu befassen. In diesem Fall mit dem Variablenscope.

Zitat:
Wie meinst du das mit dem: Fest verdrahten der Funktion?

Dort:
Zitat:
function colorChange(){
document.getElementById("container").style.backgroundColor = "#CCC";
}
steht die ID fest drin. Selbst wenn DU die Funktion über ein anderes Element-Event antriggerst oder direkt aufrufst, wirkt das style-Change immer auf das selbe Element. Brauchst Du das Style-Change für ein weiteres Element, musst Du die Funktion kopieren, obwohl bis auf den Zielknoten alles identisch wäre.

Ergo: Den SInn von Funktionen und Parametern mal angucken.


Zuletzt bearbeitet von pantonine am Fr 02.11.2012 19:52, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
tellric
Threadersteller

Dabei seit: 27.03.2012
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Fr 02.11.2012 20:18
Titel

Antworten mit Zitat Zum Seitenanfang

myDivstyle/myDivonclick und myDiv.style/myDiv.onclick sind auch nicht dasselbe.

sorry dafür - leider konnte ich meinen Beitrag nicht mehr editieren. Ist mir auch gleich aufgefállen und ich habe es ausgebessert.

Danke für deine Antwort - Vielleicht kennst du einen guten Link, der sich mit Variablenscope beschäftigt.

Wie auch immer: Vielen Dank
tellric
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Fr 02.11.2012 20:38
Titel

Antworten mit Zitat Zum Seitenanfang

Vielleicht hier: http://learn.appendto.com/

Die Tutorials sich komplett mal anzusehen lohnt sich.


Zuletzt bearbeitet von pantonine am Fr 02.11.2012 20:39, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen [Suche] Bildergalerie mit folgender fkt.
a link funkt nicht.
[Farbauswahl] Was für eine 2. Farbe zu folgender ...
swfobject in html einbinden so das es im IE funkt.
Vorladen von Bildern funkt nicht!
Tooltips (JQuery) funkt nur in Firefox? Warum?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.