Verwendung des rand() befehls in JS
Chris
- javascript
0 Beat0 fastix®0 Gunnar Bittersmann0 MudGuard0 Gunnar Bittersmann0 Chris0 ChrisB
Hallo,
ich habe da eine kleine Frage zum rand() befehl in JS:
for(var i = 0; i < 4+lvl-1; i++)
{
Zahlen[i] = parseInt( rand(25) + 1);
if(document.getElementById("T+String(Zahlen[i])").style.backgroundColor="yellow")
{
continue;
}
else
{
document.getElementById("T+String(Zahlen[i])").style.backgroundColor="yellow";
}
}
Folgendes soll passieren:
Es soll eine zufällige Zahl zwischen 1 und 25 generieren.
Die Zahl soll in der if bedingung zu T+"zufällige Zahl als string" werden woraufhin überprüft werden soll ob die Hintergrundfarbe des betreffenden Objekts schon gelb ist.
Wenn nicht dann soll diese gelb gefärbt werden.
Wenn ich diese Funktion jetzt durch Firebugs untersuchen lasse sagt er mir: int is not defined
rand() is not defined
Zahlen[i] = int(rand(25) + 1);
Ich bin dankbar um jeden Tipp, da ich erst gestern mit JS angefangen habe.
Ich bin dankbar um jeden Tipp, da ich erst gestern mit JS angefangen habe.
alert(Math.random(1));
random ist eine Methode des Math Objects.
Dieses Object stellt dir auch die weiteren Methoden floor() und ceil() zur Verfügung.
mfg Beat
@@Beat:
nuqneH
Dieses Object stellt dir auch die weiteren Methoden floor() und ceil() zur Verfügung.
Wobei letztere zwar zum ceil, hier aber nicht zum Ziel führt.
Qapla'
Ok nochmals danke,
nochmal zu rand()
ich bin ausversehn in die falsche Sparte gekommen und hab bei perl geguckt(schande über mein Haupt).
Jetzt nochmal eine Frage:
ist es bei Javascript nicht so, dass wenn man bei einer Variable (in meinem Fall "Zahlen") ein []dahinter setzt bei jedem schleifendurchlauf eine neue Zahl generiert wird?
for(var i = 0; i < 4+lvl-1; i++)
{
Zahlen[i] = Math.floor( Math.random()*25) + 1;
.
.
.
}
@@Beat:
nuqneH
Dieses Object stellt dir auch die weiteren Methoden floor() und ceil() zur Verfügung.
Wobei letztere zwar zum ceil, hier aber nicht zum Ziel führt.
Qapla'
@@Chris:
nuqneH
(schande über mein Haupt).
Heißt das nicht „Asche auf mein Haupt“?
for(var i = 0; i < 4+lvl-1; i++)
{
Zahlen[i] = Math.floor( Math.random()*25) + 1;
Du solltest nicht jeden Fehler kopieren. (Asche auf mein Haupt.)
Und dein Posting nicht irgendwo plazieren, sondern als Antwort zu dem Posting, auf das du dich beziehst.
Und sinnvoll zitieren, nicht alles.
Qapla'
@@Chris:
nuqneH
»»(schande über mein Haupt).
»»Heißt das nicht „Asche auf mein Haupt“?
Sry aber ich kenn nur Schande.
Und dein Posting nicht irgendwo plazieren, sondern als Antwort zu dem Posting, auf das du dich beziehst.
»»
Mache ich eig.... Das letzte passte nur nirgendwo zu.
Und sinnvoll zitieren, nicht alles.
Über sinnvolles Zitieren kann man lange diskutieren. Des Weiteren war das Zitat jetzt nicht so lang das sich eine Kürzung gelohnt hätte.
Und nun zurück zum Thema:
...
var Verweis = "T"+String(Zahlen)
if(document.getElementById("Verweis").style.backgroundColor="yellow")
...
Kann man nicht eine Variable in getElementById einfügen, denn wie gesagt es soll ein String gebastelt werden, der einer ObjektID entspricht, sodass auf diese zugegriffen werden kann.
Viele Grüße,
Chris
@@Chris:
nuqneH
Über sinnvolles Zitieren kann man lange diskutieren.
Dass TOFU kein sinnvolles Zitieren ist, darüber wird hier nicht lange diskutiert.
Des Weiteren war das Zitat jetzt nicht so lang das sich eine Kürzung gelohnt hätte.
Du hast dich nicht einmal auf das Zitat (geschweige denn überhaupt auf das Posting) bezogen.
Und nun zurück zum Thema:
...
var Verweis = "T"+String(Zahlen)
Und schon wieder nicht.
Nochmal: Du solltest dein Posting nicht irgendwo plazieren, sondern als Antwort zu dem Posting, auf das du dich beziehst.
Sonst hat niemand mehr die Übersicht, welchen Hinweisen du nachgegangen bist. Sinnvolles Antworten fällt dann schwer.
Qapla'
Moin!
Wenn ich diese Funktion jetzt durch Firebugs untersuchen lasse sagt er mir: int is not defined
rand() is not defined
Zahlen[i] = int(rand(25) + 1);
Zahlen[i] = parseInt(Math.random()*25 + 1);
Aber wahrscheinlich wolltest Du vielmehr:
Zahlen[i] = Math.floor(Math.random()*25 + 1);
Guckst Du auch hier: <http://de.selfhtml.org/javascript/objekte/math.htm@title=Objekt Math>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Erstmal vielen dank für die schnelle hilfe, allerdings hab ich jetzt genau das gleiche Problem, da er mir sagt jetzt sei Zahlen[i] undefined obwohl 2 Zeile darüber "var Zahlen;" steht.
Moin!
Wenn ich diese Funktion jetzt durch Firebugs untersuchen lasse sagt er mir: int is not defined
rand() is not defined
Zahlen[i] = int(rand(25) + 1);
Zahlen[i] = parseInt(Math.random()*25 + 1);
Aber wahrscheinlich wolltest Du vielmehr:
Zahlen[i] = Math.floor(Math.random()*25 + 1);
Guckst Du auch hier: <http://de.selfhtml.org/javascript/objekte/math.htm@title=Objekt Math>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hallo Chris,
neben den restlichen Basics solltest du dir mal http://de.selfhtml.org/javascript/objekte/array.htm ansehen. Beachte, dass Arrayelemente von 0 bis (n-1) gezählt werden.
Gruß, Jürgen
@@Chris:
nuqneH
Wenn ich diese Funktion jetzt durch Firebugs untersuchen lasse sagt er mir: int is not defined
?? Wo kommt 'int' her?
rand() is not defined
Richtig. Es gibt in JavaScript keine <http://de.selfhtml.org/javascript/objekte/unabhaengig.htm@title=objektunabhängige Funktion> rand().
Das http://de.selfhtml.org/javascript/objekte/math.htm@title=Math-Objekt bietet eine solche Methode, die heißt allerdings http://de.selfhtml.org/javascript/objekte/math.htm#random@title=random() …
Zahlen[i] = parseInt( rand(25) + 1);
… und erwartet keinen Parameter, sondern liefert einen Wert aus dem Intervall [0, 1[.
Du möchtest eine Ganzzahl aus [1, 26]?
Dann musst du die Zufallszahl aus [0, 1[ mit 26 multiplizieren, das Produkt liegt in [0, 26[. Davon nimmst du den <http://de.selfhtml.org/javascript/objekte/math.htm#floor@title=ganzzahligen Anteil>, der ist in [0, 25]. 1 dazuaddiert ergibt eine Zufallszahl aus [1, 26].
Zahlen[i] = Math.floor(Math.random() * 25) + 1;
Qapla'
PS: [a, b[ ist das halboffene Intervall a ≤ x < b
[a, b] ist das geschlossene Intervall a ≤ x ≤ b
Hi,
Zahlen[i] = parseInt( rand(25) + 1);
Math.rand wurde ja schon erwähnt.
if(document.getElementById("T+String(Zahlen[i])").style.backgroundColor="yellow")
Ein Element mit id="T+String(Zahlen[i])" gibt es nicht - Klammern und + dürfen in id-Werten nicht vorkommen.
Informiere Dich, wie Du mehrere Werte zu einem String zusammenbauen kannst.
Würde das Element mit der id existieren:
Die Zuweisung von "yellow" ergibt den zugewiesenen Wert (also "yellow"), der zu true evaluiert wird, also wird immer
continue;
ausgewählt, niemals
document.getElementById("T+String(Zahlen[i])").style.backgroundColor="yellow";
Im if willst Du vermutlich den Vergleichsoperator == statt des Zuweisungsoperators = verwenden.
cu,
Andreas
Hallo,
Im if willst Du vermutlich den Vergleichsoperator == statt des Zuweisungsoperators = verwenden.
und selbst dann ist der Erfolg fraglich, denn ob die Browser den einmal gesetzten Farbwert als "yellow", als "#FFFF00", als "#FF0", oder als "rgb(255, 255, 0)" zurückgeben, bleibt ihnen überlassen.
Ciao,
Martin
@@Der Martin:
nuqneH
und selbst dann ist der Erfolg fraglich, denn ob die Browser den einmal gesetzten Farbwert als "yellow", als "#FFFF00", als "#FF0", oder als "rgb(255, 255, 0)" zurückgeben, bleibt ihnen überlassen.
Das Problem tritt gar nicht auf, wenn man es richtig macht: per JavaScript keine Stile setzen/abfragen, sondern Klassenzugehörigkeiten setzen/abfragen. Die Formatierung der Klasse (die _nicht_ "yellow" heißen sollte!) steht im Stylesheet.
Qapla'
Informiere Dich, wie Du mehrere Werte zu einem String zusammenbauen kannst.
schon passiert
var Verweis = "T"+Zahlen;
if(document.getElementById("Verweis").innerHTML.style.backgroundColor.yellow== true)
{
continue;
}
else
{
document.getElementById("Verweis").style.backgroundColor="yellow";
}
Ist continue dort falsch? Es soll eig. bezwecken, dass er einfach weiter macht mit else.
[latex]Mae govannen![/latex]
var Verweis = "T"+Zahlen;
Du belegst eine Variable mit der Zeichenkette bestehend aus »T« und dem Inhalt der Variable »Zahlen«
if(document.getElementById("Verweis").innerHTML.style.backgroundColor.yellow== true)
... aber verwendest sie hier *nicht*, sondern suchst nach einem Element, daß die id »Verweis« trägt.
Du willst aber ein Element, das die ID trägt, die in der Variable »Verweis« abgelegt ist. Ergo: Setze die Variable ein statt der Zeichenkette.
Auf die Zuweisung statt Vergleich wurde bereits hingewiesen.
Cü,
Kai
@@Chris:
nuqneH
if(document.getElementById("Verweis").innerHTML.style.backgroundColor.yellow== true)
Das wird nichts.
Nicht document.getElementById("Verweis").innerHTML
hat ein style
-Unterobjekt, sondern das Elementobjekt document.getElementById("Verweis")
.
style.backgroundColor
könnte evtl. den Wert "yellow" haben (vermutlich aber nicht), aber kein Unterobjekt style.backgroundColor.yellow
.
Gegen true
zu vergleichen ist auch kaum sinnvoll.
Qapla'
@@Chris:
nuqneH
woraufhin überprüft werden soll ob die Hintergrundfarbe des betreffenden Objekts schon gelb ist.
Der Vergleich dürfte nicht erforderlich sein.
Wenn nicht dann soll diese gelb gefärbt werden.
Warum färbst du nicht ohne vorige Prüfung einfach gelb? Wenn’s vorher schon gelb war, ändert sich doch nichts.
Einen Wert auszulesen dürfte so ziemlich genauso aufwändig sein wie einen Wert zu setzen. Du sparst die Vergleichsoperation, damit Rechenzeit, Prozessorleistung, Energie, CO₂-Emission und du rettest die Welt.
Qapla'
Warum färbst du nicht ohne vorige Prüfung einfach gelb? Wenn’s vorher schon gelb war, ändert sich doch nichts.
Weil in jedem Fall 4 felder gelb gefärbt werden müssen, bei random aber 2 mal der gleiche wert rauskommen kann
@@Chris:
nuqneH
Weil in jedem Fall 4 felder gelb gefärbt werden müssen
Warum steht das nicht in deiner ursprünglichen Problembeschreibung?
bei random aber 2 mal der gleiche wert rauskommen kann
Was gedachtest du, dann zu tun?
Qapla'
@ Qapla'
»»Warum steht das nicht in deiner ursprünglichen Problembeschreibung?
Weil mir erst hinterher aufgefallen ist, dass manchmal die gleichen zahlen rauskommen und ich vorher nicht drüber nachgedacht hab.
Was gedachtest du, dann zu tun?
Du meinst du Verwendung? Für ein kleines Gedächnis"Spielchen".
@@Chris:
nuqneH
Was gedachtest du, dann zu tun?
Du meinst du Verwendung?
Nein. Ich meinte: Was gedachtest zu tun, wenn eine Zufallszahl wiederholt gezogen wird?
Qapla'
@@Qapla'
Nein. Ich meinte: Was gedachtest zu tun, wenn eine Zufallszahl wiederholt gezogen wird?
ignorieren, deshalb in der if anweisung das continue;
@@Chris:
nuqneH
Nein. Ich meinte: Was gedachtest zu tun, wenn eine Zufallszahl wiederholt gezogen wird?
ignorieren, deshalb in der if anweisung das continue;
Nö. Wie http://de.selfhtml.org/javascript/sprache/schleifen.htm#break_continue@title=SELFHTML sagt: „Mit continue
erzwingen Sie sofort den nächsten Schleifendurchlauf. Nachfolgende Anweisungen innerhalb der Schleife werden bei diesem Schleifendurchlauf nicht mehr ausgeführt.“
Bei dir gibt es keine nachfolgenden Anweisungen innerhalb der Schleife. (Vom else
-Zweig abgesehen. Da wird aber sowieso nicht reingegangen, wenn die Bedingung erfüllt ist (also das continue
ausgeführt wird).
Das continue
bewirkt also gar nichts. Es folgt einfach der nächste Schleifendurchlauf, der auch ohne das continue
genauso kommen würde.
Deine Schleife wird viermal durchlaufen, egal ob eine Zufallszahl mehrfach gezogen wird oder nicht. In dem Fall werden weniger als 4 Felder gelb gefärbt. Willst du das so?
Qapla'
Vielen Dank an alle die mir so schnelle Hilfe geboten haben. Das läuft jetzt soweit.
nur leider funktioniert array nicht ganz so gut, fügt pro durchlauf ein Komma hinzu das nur scher zu entfernen ist, das ist aber ein anderes Thema.
Habs dank euer hilfe wie folgt gelöst:
for(var i = 0; i < 4+lvl-1; i++)
{
var Zahlen= new Array(1);
Zahlen[i] = Math.floor(Math.random()*25) + 1;
Zahlen=Zahlen()
var Verweis = "T"+Zahlen;
Zahlen=""
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
{
continue;
}
else
{
document.getElementById(Verweis).style.backgroundColor="yellow";
}
}
und sry das ich keine stylesheets verwendie die kommen bei mir erst ganz zum schluss hauptsache sollte erstmal sein das es läuft.^^
Hallo,
Vielen Dank an alle die mir so schnelle Hilfe geboten haben. Das läuft jetzt soweit.
faszinierend - das bedeutet, dass ein großer Teil deines Codes offenbar überflüssig ist.
var Zahlen= new Array(1);
Zahlen=Zahlen()
Was ist das? Erst erzeugst du ein neues Array, dann weist du ihm das Ergebnis seines Konstruktor-Aufrufs zu, ...
var Verweis = "T"+Zahlen;
Zahlen=""
... und schließlich einen leeren String.
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
Warum das Unfug ist, hat MudGuard dir doch schon recht gut erklärt.
So long,
Martin
@ Martin
faszinierend - das bedeutet, dass ein großer Teil deines Codes offenbar überflüssig ist.
warum das?
var Zahlen= new Array(1); Zahlen=Zahlen()
Was ist das? Erst erzeugst du ein neues Array, dann weist du ihm das Ergebnis seines Konstruktor-Aufrufs zu, ...
vor der Zweiten zeile sind eig. "//"
var Verweis = "T"+Zahlen; Zahlen=""
... und schließlich einen leeren String.
weil ich die variable Zahl zurücksetzten will was noch nicht klappt wie ich schon beschrieben habe.
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
warum das funktioniert hängt damit zusammen das das programm mit einem browser geöffnet wird und der browser gelb immer gleich interpretiert
@Qapla'
»»Das glaube ich nicht.
schön ich weiß es aber...
»»Das ist Unsinn. Schon deshalb, weil doppelte Arbeit.
schön das bei dir die sachen gut aussehn dieses wiederum interressiert mich aber nicht.
doppelte arbeit ist es für 3 klicks und 3 Tastenkombinationen pro klasse im ganzen dokument.
Trotzdem danke euch beiden und ich möchte nochmals drauf hinweisen, dass ich mich grad durch Javascript durcharbeite und deshalb noch nicht alle unterstützten funktionen kenne.
@@Chris:
nuqneH
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
warum das funktioniert hängt damit zusammen das das programm mit einem browser geöffnet wird und der browser gelb immer gleich interpretiert
Das ist Unsinn.
Warum das nicht funktioniert, hatte ich die gesagt.
@Qapla'
Es sei Euch gestattet, mich mit „Gunnar“ anzureden.
Und wie oft denn noch? Du solltest deine Antworten nicht irgendwo plazieren!
Wenn du alle Hinweise missachtest, verliert man hier die Lust, dir weiterhin welche zu geben.
»»Das glaube ich nicht.
schön ich weiß es aber...
doppelte arbeit ist es für 3 klicks und 3 Tastenkombinationen pro klasse im ganzen dokument.
Ich verstehe nicht, was du meinst.
Ich bin auch nicht sicher, ob du verstehst, was ich meine.
Qapla'
@ Gunnar
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
Das ist Unsinn.Warum das nicht funktioniert, hatte ich die gesagt.
Naja laufen tuts trotzdem
@Qapla'
Es sei Euch gestattet, mich mit „Gunnar“ anzureden.
Und wie oft denn noch? Du solltest deine Antworten nicht irgendwo plazieren!
Wenn du alle Hinweise missachtest, verliert man hier die Lust, dir weiterhin welche zu geben.
ich klicke doch oben schön auf "Nachricht beantworten" wo soll ichs denn sonst hinmachen?
doppelte arbeit ist es für 3 klicks und 3 Tastenkombinationen pro klasse im ganzen dokument.
Ich verstehe nicht, was du meinst.
Strg+F->Ersetzen Einfügen was weg soll(hier die verschiedenen Styles die ich schon gesetzt hab)-- Einfügen was hin soll(hier klasse)
Ich bin auch nicht sicher, ob du verstehst, was ich meine.
du meinst das ich "style=....." löschen muss und dafür was neues einsetzen muss, wenn ich mich irre tuts mir leid.
Im endeffect hast du natürlich recht das es doppelte arbeit ist. trotzdem muss ich sowieso noch einige veränderungen vornehmen. z.b. soll es nicht die bgcolor sein die sich ändert sondern es muss ein bild dahin.
außerdem muss ich auch noch ne alternative für die arrays finden, da ich beim jeweils 2. durchlauf das "," nicht wegbekomme.
und dann kommt erst das hauptprojekt d.h. dieses dient erstmal der einarbeitung in js und zum Verständniss einiger funktionen.
sollte ich dir in einer weise unrecht getan haben tut es mit leid.
@@Chris:
nuqneH
Warum das nicht funktioniert, hatte ich die gesagt.
Naja laufen tuts trotzdem
Aber nicht so, wie du es gern hättest.
ich klicke doch oben schön auf "Nachricht beantworten" wo soll ichs denn sonst hinmachen?
Die Antwort auf mein Posting nicht mit der Antwort auf Martins Posting vermengen, sondern besser getrennt antworten.
trotzdem muss ich sowieso noch einige veränderungen vornehmen. z.b. soll es nicht die bgcolor sein die sich ändert sondern es muss ein bild dahin.
Also später die Darstellung ändern. Wenn du gleich dein Script richtig schreibst, also die Darstellung gar nicht erst im Script angibst, musst du später am Script nichts mehr ändern, sondern nur im Stylesheet.
außerdem muss ich auch noch ne alternative für die arrays finden, da ich beim jeweils 2. durchlauf das "," nicht wegbekomme.
?? Was meinst du damit?
sollte ich dir in einer weise unrecht getan haben tut es mit leid.
Schon gut, ich bin ja noch bei dir.
Qapla'
@@Qapla'
Warum das nicht funktioniert, hatte ich die gesagt.
Naja laufen tuts trotzdem
Aber nicht so, wie du es gern hättest.
Doch eig. genau so ^^
wenn du magst kann ich es dir gerne morgen via mail schicken dann kannst du dich selbst davon überzeugen^^
Die Antwort auf mein Posting nicht mit der Antwort auf Martins Posting vermengen, sondern besser getrennt antworten.
ok wollte nur nicht spammen
Also später die Darstellung ändern. Wenn du gleich dein Script richtig schreibst, also die Darstellung gar nicht erst im Script angibst, musst du später am Script nichts mehr ändern, sondern nur im Stylesheet.
hatte aber heute noch keine bilder bekommen, die kommen erst morgen^^
?? Was meinst du damit?
ja der hat immer die "," zwischen den zahlen mitgelsesen aber funzt jetzt auch richtig.
Naja für heute hab ich erstmal genug und mach feierabend.
schönen abend noch
Grüße Chris
@@Chris:
nuqneH
@@Qapla'
Warum das nicht funktioniert, hatte ich die gesagt.
Naja laufen tuts trotzdem
Aber nicht so, wie du es gern hättest.
Doch eig. genau so ^^
Nein.
Dass document.getElementById(Verweis).style.backgroundColor.yellow
nicht existiert, hatte ich dir doch gesagt.
Lass dir doch mal zum Debuggen document.getElementById(Verweis).style
ausgeben (bspw. per alert()
): Es liefert "[object CSSStyleDeclaration]". Das Objekt existiert.
Dann nun lass dir document.getElementById(Verweis).style.backgroundColor
ausgeben: Wie Sie sehen, sehen sie nichts. Es ist nicht gesetzt, also ein Leerstring.
Und nun lass dir document.getElementById(Verweis).style.backgroundColor.yellow
ausgeben: "undefined".
Wenn du das nun vergleichst if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
, dann liefert das immer false
. Es wird folglich immer in den else
-Zweig gesprungen, was dich zu der Fehleinschätzung führt, dein Code würde das tun, was du erwartest.
Nicht einmal die Abfrage tut das Gewünschte. Und dass du im Fall einer mehrfach gezogenen Zufallszahl noch nichts tust, hatte ich ja auch schon erwähnt.
wenn du magst kann ich es dir gerne morgen via mail schicken
Nein danke. Du kannst aber gern dein Online-Beispiel hier verlinken.
Also später die Darstellung ändern. Wenn du gleich dein Script richtig schreibst, also die Darstellung gar nicht erst im Script angibst, musst du später am Script nichts mehr ändern, sondern nur im Stylesheet.
hatte aber heute noch keine bilder bekommen, die kommen erst morgen^^
Eben. Ein guter Grund, Programmlogik (JavaScript) und Darstellung (CSS) voneinander zu trennen.
Qapla'
@@Qapla'
Warum das nicht funktioniert, hatte ich die gesagt.
Naja laufen tuts trotzdem
Aber nicht so, wie du es gern hättest.
Doch eig. genau so ^^Nein.
Dass
document.getElementById(Verweis).style.backgroundColor.yellow
nicht existiert, hatte ich dir doch gesagt.
...
also ich weiß nicht was du amchst aber bei mir gibt er yellow aus <a href="http://www.bilder-space.de/bilder/be4f09-1281507313.jpg" target="_blank"><img src="http://www.bilder-space.de/show_img.php?img=be4f09-1281507313.jpg&size=thumb" border="1" alt="Bilder-Space.de - Hostet DEINE Bilder" /></a>
else
{
document.getElementById(Verweis).style.backgroundColor="yellow";
alert(document.getElementById(Verweis).style.backgroundColor)
}
Sry das verlinken hat net so geklappt also hier nochmal der richtige link
Hallo Chris,
... aber bei mir gibt er yellow aus ...
mit welchen Browsern getestet?
Gruß, Jürgen
@@Chris:
nuqneH
also ich weiß nicht was du amchst aber bei mir gibt er yellow aus […]
document.getElementById(Verweis).style.backgroundColor="yellow";
alert(document.getElementById(Verweis).style.backgroundColor)
Es ging mir nur darum zu zeigen, dass document.getElementById(Verweis).style.backgroundColor
existiert; document.getElementById(Verweis).style.backgroundColor.yellow
jedoch nicht.
Und wer ist „er“?
Nachdem du document.getElementById(Verweis).style.backgroundColor
einen Wert zugewiesen hast, hat die Eigenschaft einen anderen Wert als "". Es ist aber nicht gesagt (siehe Martin), dass der Wert "yellow" ist. Opera gibt "#ffff00" aus.
Wie du diesem Umstand sinnvoll begegnest, hatte ich die auch schon gesagt: Du setzt nicht die Stileigenschaft, sondern weist eine Klasse zu. Diese sollte nicht nach der gegenwärtig gewünschten Darstellung benannt sein (also nicht "yellow"), denn wie du selbst sagtest, soll es ja später einmal ein Hintergrundbild sein, und dann passt die Bezeichnung "yellow" nicht mehr. Du benennst die Klasse nach der Funktion: in diesem Fall könnte sie "gezogen" heißen:
document.getElementById(Verweis).className += " gezogen";
Im Stylesheet steht, wie die Elemente dieser Klasse dargestellt werden sollen:
.gezogen { background-color: yellow }
Bei späterer Änderung musst du am JavaScript nichts mehr ändern (die Programmlogik ändert sich ja auch nicht), sondern nur am Stylesheet:
.gezogen { background-image: url(http://example.com/foo) }
Nun bleibt aber (mindestens) noch eine Frage offen.
Wie viele Felder werden gelb gefärbt? Wirklich immer 4? Die Wahrscheinlichkeit dafür ist mit 22/25 = 88% (wenn ich mich nicht vertan habe) recht hoch, aber es können auch weniger sein.
Ändere doch mal in for(var i = 0; i < 4+lvl-1; i++)
die Anzahl der Schleifendurchläufe! (BTW, was ist lvl
und warum rechnest du 4 - 1 nicht gleich zusammen?) Wenn die Schleife 22 Mal durchlaufen wird, ist die Wahrscheinlichkeit, dass 22 Felder gefärbt werden, nur noch 4/25 = 16% (mit obiger Einschränkung).
Was gedenkst du da zu tun?
Qapla'
@@Gunnar:
Und wer ist „er“?
er ist der Browser
Wie du diesem Umstand sinnvoll begegnest, hatte ich die auch schon gesagt: Du setzt nicht die Stileigenschaft, sondern weist eine Klasse zu.
...
Jo schon geschehen
Nun bleibt aber (mindestens) noch eine Frage offen.
Wie viele Felder werden gelb gefärbt? Wirklich immer 4?
also in der ersten runde werden 4 gefärbt dann 5, dann 6 usw. bis 14 von 25 feldern in der letzten runde gefärbt sind.
Ändere doch mal in
for(var i = 0; i < 4+lvl-1; i++)
die Anzahl der Schleifendurchläufe! (BTW, was istlvl
und warum rechnest du 4 - 1 nicht gleich zusammen?)
hab ich auch schon gemacht
Was gedenkst du da zu tun?
nachdem die i-schleife in der ersten runde 4 mal durchlaufen wurde und lvl noch auf 1 ist soll er in eine andere funktion springen wobei er den parameter 1 übergeben soll
Dazu erstmal eine neue frage:
wenn ich das richtig verdatanden habe kann ich auf eine andere funktion einfach mit Funktionsname(1);
verweisen?
anbei nochmal der code damit ihr nicht soviel nachschlagen müsst:
for (var lvl=1; lvl<=10; lvl++)
{
document.getElementById("Levelanz").value="Level"+" "+lvl;
for(var i = 1; i < 3+lvl; i++)
{
var Zahlen= new Array(1);
Zahlen[1] = Math.floor(Math.random()*25) + 1;
var Verweis = Zahlen[1]+"T";
if(document.getElementById(Verweis).className == "kastenB")
{
i=i-1;
}
else
{
document.getElementById(Verweis).className == "kastenB";
}
if (i==3+lvl)
{
TrueoFalse(1);
}
}
Und nochmal kurz ne Frage:
warum += und nicht == bei
document.getElementById(Verweis).className += " gezogen";
@@Chris:
nuqneH
Und nochmal kurz ne Frage:
warum += und nicht == bei
document.getElementById(Verweis).className += " gezogen";
Die ist schnell beantwortet.
==
wäre völlig falsch. MaudGuard hat dich auf den Unterschied zwischen Zuweisungsoperator =
und Vergleichsoperator ==
hingewiesen. S.a. [http://de.selfhtml.org/javascript/sprache/operatoren.htm@title=SELFHTML]
document.getElementById(Verweis).className = "gezogen";
würde eine vorher evtl. schon vorhandene Klasse "foo" überschreiben.
document.getElementById(Verweis).className += " gezogen";
ist eine <http://de.selfhtml.org/javascript/sprache/operatoren.htm#berechnung@title=abgekürzte Schreibweise> für
document.getElementById(Verweis).className = document.getElementById(Verweis).className + " gezogen";
Eine evtl. vorhandene Klasse "foo" bleibt dann erhalten; das Element gehört beiden Klassen an: "foo gezogen".
Qapla'
Hi,
MaudGuard hat
nein, der nicht. Auch nicht HaroldGuard. ;-)
cu,
Andreas
@@MudGuard:
nuqneH
MaudGuard hat
nein, der nicht.
Aua. Dit jibt Haue.
Auch nicht HaroldGuard. ;-)
??
Qapla'
Hi,
MaudGuard hat
Auch nicht HaroldGuard. ;-)
??
Du kennst "Harold and Maud[e]" nicht?
cu,
Andreas
@@MudGuard:
nuqneH
Du kennst "Harold and Maud[e]" nicht?
Nö, noch nie gesehen.
Qapla'
Hi,
Du kennst "Harold and Maud[e]" nicht?
Nö, noch nie gesehen.
Nachsitzen!
äh - nachholen ;-)
cu,
Andreas
@@Chris:
nuqneH
for (var lvl=1; lvl<=10; lvl++)
{
document.getElementById("Levelanz").value="Level"+" "+lvl;
Warum fasst du "Level"+" " nicht gleich zu "Level " zusammen?
for(var i = 1; i < 3+lvl; i++)
Du solltest dir einen Schreibstil angewöhnen und diesen durchgängig beibehalten. Oben hattest du ein Leerzeichen nach for
, unten nicht. Oben hattest du keine Leerzeichen vor und nach Vergleichsoperatoren, unten schon.
Ich persönlich setze Leerzeichen zwischen for
/if
/switch
und (
, aber nicht zwischen Funktionsname und (
.
Und auch vor und nach Berechnungsoperatoren (nicht jedoch bei unären ++
, --
, -
, !
).
Zur Einrückung ist ein Tab je Ebene zu empfehlen (lässt sich hier im Forum nicht machen). Das sähe dann so aus:
for (var lvl = 1; lvl <= 10; lvl++)
{
document.getElementById("Levelanz").value="Level " + lvl;
for(var i = 1; i < 3 + lvl; i++)
{
var Zahlen= new Array(1);
Äh, wozu ein Array, wenn es nur ein Element enthält?
Zahlen[1] = Math.floor(Math.random()*25) + 1;
Das ist immer noch falsch.
var Verweis = Zahlen[1]+"T";
Und wozu das? Du möchtest das "T" nicht hinten anhängen, sondern vorne dranstellen, weil ID-Bezeichner in HTML nicht mit Ziffern beginnen dürfen?
if(document.getElementById(Verweis).className == "kastenB")
{
i=i-1;
Ah, das ist eine mögliche Lösung des Problems.
else
{
document.getElementById(Verweis).className == "kastenB";
Hier möchtest du zuweisen, nicht vergleichen.
if (i==3+lvl)
{
TrueoFalse(1);
}
Aber was soll das?
Qapla'
@Gunnar
document.getElementById("Levelanz").value="Level"+" "+lvl;
Warum fasst du "Level"+" " nicht gleich zu "Level " zusammen?
Weil ich so übersichtlicher finde.
Du solltest dir einen Schreibstil angewöhnen und diesen durchgängig beibehalten.
...
Ja das kommt hoffentlich noch. wie gesagt ich habe Montag nachmittag erst angefangen, deshalb sind für dich wahrscheinlich auch manche sachen kompliziert ausgedrückt.
Zur Einrückung ist ein Tab je Ebene zu empfehlen (lässt sich hier im Forum nicht machen)
...
wollts nur angenehmer zum lesen machen
Äh, wozu ein Array, wenn es nur ein Element enthält?
weil er jeden durchlauf 1 neues element erstellen soll
Das ist immer noch falsch.
wäre das so richtig:
Zahlen[1] = Math.random()*25;
var Verweis = Zahlen[1]+"T";
Und wozu das? Du möchtest das "T" nicht hinten anhängen, sondern vorne dranstellen, weil ID-Bezeichner in HTML nicht mit Ziffern beginnen dürfen?
o, sry, hatte ich vergessen zurück zu ändern war zu experimentellen zwecken
else
{
document.getElementById(Verweis).className == "kastenB";Hier möchtest du zuweisen, nicht vergleichen.
danke schon geändert
if (i==3+lvl)
{
TrueoFalse(1);
}Aber was soll das?
das war die unten hinzugefügte frage:
1.Wie kann ich richtig auf eine andere function verweisen? das einzige was ich dazu finde ist auf eine andere Datei zu verweisen.
Hallo,
Ich persönlich setze Leerzeichen zwischen
for
/if
/switch
und(
, aber nicht zwischen Funktionsname und(
.
ach, tatsächlich?
for (var lvl = 1; lvl <= 10; lvl++)
{
document.getElementById("Levelanz").value="Level " + lvl;for(var i = 1; i < 3 + lvl; i++)
{
var Zahlen= new Array(1);
Ach so, nicht bei verschachtelten for, if oder switch. ;-)
> Und auch vor und nach Berechnungsoperatoren
Das mache ich in einigen Fällen absichtlich nicht - beispielsweise im Kopf einer for-Schleife, wo drei Ausdrücke hintereinander stehen. Grundsätzlich schreibe ich Operator und Operanden dort ohne Leerzeichen zusammen, wo sie eine zusammenhängende Sinneinheit darstellen und ich diese Einheiten (Teilausdrücke) visuell gruppieren möchte:
`for (var lvl=1; lvl<=10; lvl++)`{:.language-javascript}
> > Zahlen[1] = Math.floor(Math.random()\*25) + 1;
> Das ist immer noch falsch.
Kommt drauf an, was man möchte. Das Array, das ursprünglich mit nur einem Element initialisiert wurde, bekommt ein zweites, nämlich eine Ganzzahl im Bereich [1 .. 25]. Der ganze Umgang mit Arrays, den Chris hier zeigt, ist aber ziemlich seltsam (ich würde sagen konfus), und so weiß ich nicht, was er hier überhaupt will.
Ciao,
Martin
--
Lieber blau machen, als sich schwarz ärgern.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
@@Der Martin:
nuqneH
for(var i = 1; i < 3 + lvl; i++)
{
var Zahlen= new Array(1);[/code]Ach so, nicht bei verschachtelten for, if oder switch. ;-)
Oops. Oops.
Zahlen[1] = Math.floor(Math.random()*25) + 1;
Das ist immer noch falsch.Kommt drauf an, was man möchte. Das Array, das ursprünglich mit nur einem Element initialisiert wurde, bekommt ein zweites, nämlich eine Ganzzahl im Bereich [1 .. 25].
Oh, das soll wohl auch. Dann lag ich ja von Anfang an falsch. Wer lesen kann …
Der ganze Umgang mit Arrays, den Chris hier zeigt, ist aber ziemlich seltsam (ich würde sagen konfus), und so weiß ich nicht, was er hier überhaupt will.
Da bin ich bei dir. ;-)
Qapla'
@@Chris:
nuqneH
Das läuft jetzt soweit.
Das glaube ich nicht.
Zahlen[i] = Math.floor(Math.random()*25) + 1;
Dass das falsch ist, hatte ich dir schon gesagt.
if(document.getElementById(Verweis).style.backgroundColor.yellow== true)
Dass das falsch ist, hatte ich dir auch schon gesagt.
und sry das ich keine stylesheets verwendie die kommen bei mir erst ganz zum schluss hauptsache sollte erstmal sein das es läuft.^^
Das ist Unsinn. Schon deshalb, weil doppelte Arbeit.
Qapla'
Hi,
Wenn ich diese Funktion jetzt durch Firebugs untersuchen lasse sagt er mir: int is not defined
rand() is not defined
Zahlen[i] = int(rand(25) + 1);Ich bin dankbar um jeden Tipp, da ich erst gestern mit JS angefangen habe.
Tipp: Verwende keine Funktionen, von denen du irgendwie annimmst, es „müsste“ sie in JavaScript geben - sondern lies nach und *informiere* dich, welche es gibt.
MfG ChrisB