TheSoulrester: [Javascript][Frage]Werte auslesen mit Schleife

Hey Leute, ich hoffe dass ich hier richtig bin und auch (insofern es sowas gibt) im richtigen Bereich geschrieben habe.

Ich möchte gerne mit einer Schleife Werte auslesen, diese verarbeiten und dann als Wert wieder setzen. Nur leider will das nicht so ganz klappen wie ich das will.

Das ganze soll diese Funktion, welch eunter folgendem Link im ersten Post beschrieben wird, automatisch verwirklichen: Linkbeschreibung

Soweit so gut. Leider hapert es bei mir nun, die Werte dank einer For Schleife auszulesen, zu verarbeiten und dannnach als Wert zu setzen.

Zunächst habe ich so gearbeitet:

<html>
	<head>
		<script language="javascript" type="text/javascript">
			function rechnen(){
				var a=0;
				var Erzanzahl = document.getElementById("Metall").value;
				var Schmelzdauer = document.getElementById("Schmelzdauer").value;
				var Schmelzdauerinmin;
				var Brenndauer;
				var Anzahl;
				
				/*if (document.getElementById("Thatch").value != "Anzahl"){
					a = document.getElementById("Thatch").value;
				}
				else {
					if (document.getElementById("Holz").value != "Anzahl"){
						a = document.getElementById("Holz").value;
					}
					else {
						if (document.getElementById("Sparkpowder").value != "Anzahl")
							a = document.getElementById("Sparkpowder").value;
					}
				}
				alert('Die Variable a ist:' && a);*/
			
				
				Schmelzdauerinmin = (Erzanzahl * Schmelzdauer) / 60;
				
				for (var i = 0; i <= 3; i++) {
					Brenndauer = document.Uebersicht.brenndauer[i].value;
					Schmelzdauerinmin / (Brenndauer / 60) = Anzahl;
					document.Uebersicht.anzahlmat[i].value = Anzahl;
				}
				alert('Die Variable a ist:' && Anzahl);
			}	
		</script>
	</head>
	<body>
		<form name="Uebersicht">
			<table border="0.5">
				<tr>
					<th>Ressource</th>
					<th>Anzahl</th>
				</tr>
				<tr>
					<td>Metallbarren:</td>
					<td><input type="Text" id="Metall" name="Metall" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="20" id="Schmelzdauer"></td>
				</tr>
				<tr>
					<td>Thatch:</td>
					<td><input type="Text" id="Thatch" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="7,5" id="brennthatch" name="brenndauer"></td>
				</tr>
				<tr>
					<td>Holz:</td>
					<td><input type="Text" id="Holz" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="30" id="brennholz" name="brenndauer"></td>
				</tr>
				<tr>
					<td>Sparkpowder:</td>
					<td><input type="Text" id="Sparkpowder" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="60" id="brennsparkpowder" name="brenndauer"></td>
				</tr>
				<tr>
					<td><input type="Button" id="berechnen" value="Berechnen" onclick="rechnen()"></td>
				</tr>
			</table>
		</form>
		<form name="Auswahl">
			<table>
				<tr>
					<td>Metallbarren:</td>
					<td><input type="radio" id="Metallzeit" value="Auswählen" name="Metallzeit"><input type="hidden" value="20" id="zeitmetall">
				</tr>
			</table>
		</form>
	</body>
</html>

das alert habe ich indemfall geschrieben, um zu testen, ob Variable A ausgegeben werden kann, oder ob ein fehler vorliegt (was es in dem fall tut)

anschließend habe ich mir im forum mal das Array Thema angeschaut, und versucht dieses ebenfalls umzusetzen:

<html>
	<head>
		<script language="javascript" type="text/javascript">
			function rechnen(){
				var a=0;
				var Erzanzahl = document.getElementById("Metall").value;
				var Schmelzdauer = document.getElementById("Schmelzdauer").value;
				var Schmelzdauerinmin;
				var Brenndauer = new Array(document.getElementById("brennthatch").value, document.getElementById("brennholz").value, document.getElementById("brennsparkpowder").value, );
				var Anzahl;
				var Brenndaueranzahl = new Array(document.getElementById("Thatch").value, document.getElementById("Holz").value, document.getElementById("Sparkpowder").value, );
				
				/*if (document.getElementById("Thatch").value != "Anzahl"){
					a = document.getElementById("Thatch").value;
				}
				else {
					if (document.getElementById("Holz").value != "Anzahl"){
						a = document.getElementById("Holz").value;
					}
					else {
						if (document.getElementById("Sparkpowder").value != "Anzahl")
							a = document.getElementById("Sparkpowder").value;
					}
				}
				alert('Die Variable a ist:' && a);*/
			
				
				Schmelzdauerinmin = (Erzanzahl * Schmelzdauer) / 60;
				
				for (var i = 0; i <= 3; i++) {
					Schmelzdauerinmin / (Brenndauer[i] / 60) = Anzahl;
					Brenndaueranzahl[i] = Anzahl;
				}
				alert('Die Variable a ist:' && Anzahl);
			}	
		</script>
	</head>
	<body>
		<form name="Uebersicht">
			<table border="0.5">
				<tr>
					<th>Ressource</th>
					<th>Anzahl</th>
				</tr>
				<tr>
					<td>Metallbarren:</td>
					<td><input type="Text" id="Metall" name="Metall" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="20" id="Schmelzdauer"></td>
				</tr>
				<tr>
					<td>Thatch:</td>
					<td><input type="Text" id="Thatch" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="7,5" id="brennthatch" name="brenndauer"></td>
				</tr>
				<tr>
					<td>Holz:</td>
					<td><input type="Text" id="Holz" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="30" id="brennholz" name="brenndauer"></td>
				</tr>
				<tr>
					<td>Sparkpowder:</td>
					<td><input type="Text" id="Sparkpowder" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="60" id="brennsparkpowder" name="brenndauer"></td>
				</tr>
				<tr>
					<td><input type="Button" id="berechnen" value="Berechnen" onclick="rechnen()"></td>
				</tr>
			</table>
		</form>
		<form name="Auswahl">
			<table>
				<tr>
					<td>Metallbarren:</td>
					<td><input type="radio" id="Metallzeit" value="Auswählen" name="Metallzeit"><input type="hidden" value="20" id="zeitmetall">
				</tr>
			</table>
		</form>
	</body>
</html>

hat ebenfalls nicht geklappt.

ich hoffe, mir kann jmd bei dem Problem helfen und es wird sich schnell eine Lösung finden :) gerne bin ich auch für Ratschläge und Tipps offen :)

  1. Hallo,

    beim kurzen Draufschauen fällt mir auf:

    var Brenndaueranzahl = new Array(document.getElementById("Thatch").value, document.getElementById("Holz").value, document.getElementById("Sparkpowder").value, );
    
    // Brenndaueranzahl  ist hier ein Array mit drei Elementen
    
    for (var i = 0; i <= 3; i++) {
    // Die Schleife läuft von 0 bis 3, also vier Durchläufe !!!
    	Schmelzdauerinmin / (Brenndauer[i] / 60) = Anzahl;
    // Das soll funktionieren? Ich denke, hier muss Anzahl = ... stehen
    	Brenndaueranzahl[i] = Anzahl;
    }
    

    hast du denn einen Blick in die Fehlerkonsole des Browsers geworfen?

    Gruß Jürgen

    1. Hallo,

      beim kurzen Draufschauen fällt mir auf:

      var Brenndaueranzahl = new Array(document.getElementById("Thatch").value, document.getElementById("Holz").value, document.getElementById("Sparkpowder").value, );
      
      // Brenndaueranzahl  ist hier ein Array mit drei Elementen
      
      for (var i = 0; i <= 3; i++) {
      // Die Schleife läuft von 0 bis 3, also vier Durchläufe !!!
      	Schmelzdauerinmin / (Brenndauer[i] / 60) = Anzahl;
      // Das soll funktionieren? Ich denke, hier muss Anzahl = ... stehen
      	Brenndaueranzahl[i] = Anzahl;
      }
      

      hast du denn einen Blick in die Fehlerkonsole des Browsers geworfen?

      Gruß Jürgen

      die konsole spuckt mir aus, dass function rechnen() nicht definiert ist. kommentier ich die for schleife aus, wird kein fehler ausgespuckt.

  2. Tach!

    Ich möchte gerne mit einer Schleife Werte auslesen, diese verarbeiten und dann als Wert wieder setzen. Nur leider will das nicht so ganz klappen wie ich das will.

    Das war die allgemeine Beschreibung. Und nun bitte etwas präziser: wo genau passiert was nicht mehr nach Plan?

    das alert habe ich indemfall geschrieben, um zu testen, ob Variable A ausgegeben werden kann, oder ob ein fehler vorliegt (was es in dem fall tut)

    Ein alert ist schon mal ein Anfang. Besser ist console.log(), und dazu die Entwicklertools des Browsers offen zu haben. Man kann da auch Breakpoints setzen und sich die Werte ohne Zusatzcode beim Mausdraufhalten anschauen. Außerdem kann man bei Bedarf an der Konsole zu Fuß Anweisungen ausführen. Damit kommt man fast jedem Fehler auf einigermaßen angenehme Weise auf die Spur.

    anschließend habe ich mir im forum mal das Array Thema angeschaut, und versucht dieses ebenfalls umzusetzen: [...] hat ebenfalls nicht geklappt.

    Ein bisschen genauer darfst du schon beschreiben, was du vorhast und woran es gescheitert ist. Aus dem Code deine Absicht zurückzulesen ist aufwendig und nicht in jedem Fall vollständig möglich.

    alert('Die Variable a ist:' && a);

    Der Operator für Stringverkettung ist: +

    Wenn du da ein && nimmst, wird der linke Teil auf boolesche Weise ausgewertet und ergibt in deinem Fall true. Dann kommt der rechte Teil an die Reihe und dessen Ergebnis ist das Ergebnis des gesamten Ausdrucks. Den Text links bekommst du nicht zu sehen.

    dedlfix.

    1. Tach!

      Ich möchte gerne mit einer Schleife Werte auslesen, diese verarbeiten und dann als Wert wieder setzen. Nur leider will das nicht so ganz klappen wie ich das will.

      Das war die allgemeine Beschreibung. Und nun bitte etwas präziser: wo genau passiert was nicht mehr nach Plan?

      das alert habe ich indemfall geschrieben, um zu testen, ob Variable A ausgegeben werden kann, oder ob ein fehler vorliegt (was es in dem fall tut)

      Ein alert ist schon mal ein Anfang. Besser ist console.log(), und dazu die Entwicklertools des Browsers offen zu haben. Man kann da auch Breakpoints setzen und sich die Werte ohne Zusatzcode beim Mausdraufhalten anschauen. Außerdem kann man bei Bedarf an der Konsole zu Fuß Anweisungen ausführen. Damit kommt man fast jedem Fehler auf einigermaßen angenehme Weise auf die Spur.

      anschließend habe ich mir im forum mal das Array Thema angeschaut, und versucht dieses ebenfalls umzusetzen: [...] hat ebenfalls nicht geklappt.

      Ein bisschen genauer darfst du schon beschreiben, was du vorhast und woran es gescheitert ist. Aus dem Code deine Absicht zurückzulesen ist aufwendig und nicht in jedem Fall vollständig möglich.

      alert('Die Variable a ist:' && a);

      Der Operator für Stringverkettung ist: +

      Wenn du da ein && nimmst, wird der linke Teil auf boolesche Weise ausgewertet und ergibt in deinem Fall true. Dann kommt der rechte Teil an die Reihe und dessen Ergebnis ist das Ergebnis des gesamten Ausdrucks. Den Text links bekommst du nicht zu sehen.

      dedlfix.

      was ich machen will:

      zunächst zieht sich die Schleife den Wert 7,5 aus der Value mit der ID="brennthatch". dieser wert soll dann verrechnet werden mit dem Wert Brenndauerinmin und anschließend als Wert für die ID="Thatch" ausgegeben werden. danach soll der wert 30 aus brennholz genommen werden, verrechnet und ebenfalls als value in der ID="Holz" gesetzt werden. letzetres mit dem Wert 60 und der rechnung als value in die id="sparkpowder"

      der browser gibt mir aus, dass die function rechnen() nicht definiert ist. Kommentier ich die Forschleife aus, spuckt mir der browser keinen fehler mehr aus.

      wie genau arbeite ich mit console.log und co? habe das ganze selber nie in der art gesehen bzw gelesen. Ebenfalls gar nicht in der Schule bei dem bisschen Javascript behandelt.

      Ich hoffe ich konnte bisher die aufgekommenen fragen klären und mein problem konnte näher beschrieben werden.

      1. Tach!

        der browser gibt mir aus, dass die function rechnen() nicht definiert ist. Kommentier ich die Forschleife aus, spuckt mir der browser keinen fehler mehr aus.

        Der muss auch schon gleich beim Laden der Seite einen Syntaxfehler in der Konsole anzeigen. Bei einer Zuweisung muss die Variable links vom = stehen und der zu berechnende Ausdruck rechts.

        wie genau arbeite ich mit console.log und co? habe das ganze selber nie in der art gesehen bzw gelesen. Ebenfalls gar nicht in der Schule bei dem bisschen Javascript behandelt.

        Ungefähr so wie mit alert(), nur dass du für Das Ergebnis in die Konsole schauen muss und kein Popup angezeigt bekommst. Die Konsolenausgabe ist dann aber auch genauer, besonders bei Objekten und Arrays.

        dedlfix.

  3. habe es nun hinbekommen mit einer anderen art von For Schleife

    <html>
    	<head>
    		<script language="javascript" type="text/javascript">
    			function rechnen(){
    				var a=0;
    				var Erzanzahl = document.getElementById("Metall").value;
    				var Schmelzdauer = document.getElementById("Schmelzdauer").value;
    				var Schmelzdauerinmin;
    				var Brenndauer = new Array(document.getElementById("brennthatch").value, document.getElementById("brennholz").value, document.getElementById("brennsparkpowder").value);
    				var Anzahl;
    				var Brenndaueranzahl = new Array(document.getElementById("Thatch").value, document.getElementById("Holz").value, document.getElementById("Sparkpowder").value);
    				
    				/*if (document.getElementById("Thatch").value != "Anzahl"){
    					a = document.getElementById("Thatch").value;
    				}
    				else {
    					if (document.getElementById("Holz").value != "Anzahl"){
    						a = document.getElementById("Holz").value;
    					}
    					else {
    						if (document.getElementById("Sparkpowder").value != "Anzahl")
    							a = document.getElementById("Sparkpowder").value;
    					}
    				}
    				alert('Die Variable a ist:' + a);*/
    			
    				
    				Schmelzdauerinmin = (Erzanzahl * Schmelzdauer) / 60;
    				
    				for (var i = 0; i <= 3; i++) {
    					if (i == 1) {
    						Anzahl = Schmelzdauerinmin / (document.getElementById("brennthatch").value / 60);
    						document.getElementById("Thatch").value = Anzahl;
    					}
    					else {
    						if (i == 2){
    							Anzahl = Schmelzdauerinmin / (document.getElementById("brennholz").value / 60);
    							document.getElementById("Holz").value = Anzahl;	
    						}
    						else {
    							if (i == 3) {
    								Anzahl = Schmelzdauerinmin / (document.getElementById("brennsparkpowder").value / 60);
    								document.getElementById("Sparkpowder").value = Anzahl;	
    							}
    						}
    					}
    				}
    				//alert('Die Variable a ist:' + Anzahl);
    			}	
    		</script>
    	</head>
    	<body>
    		<form name="Uebersicht">
    			<table border="0.5">
    				<tr>
    					<th>Ressource</th>
    					<th>Anzahl</th>
    				</tr>
    				<tr>
    					<td>Metallbarren:</td>
    					<td><input type="Text" id="Metall" name="Metall" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';"><input type="hidden" value="20" id="Schmelzdauer"></td>
    				</tr>
    				<tr>
    					<td>Thatch:</td>
    					<td><input type="Text" id="Thatch" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';" disabled><input type="hidden" value="7.5" id="brennthatch" name="brenndauer"></td>
    				</tr>
    				<tr>
    					<td>Holz:</td>
    					<td><input type="Text" id="Holz" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';" disabled><input type="hidden" value="30" id="brennholz" name="brenndauer"></td>
    				</tr>
    				<tr>
    					<td>Sparkpowder:</td>
    					<td><input type="Text" id="Sparkpowder" name="anzahlmat" value="Anzahl" onblur="if(this.value=='') this.value='Anzahl';"  onfocus="if(this.value=='Anzahl')this.value='';" disabled><input type="hidden" value="60" id="brennsparkpowder" name="brenndauer"></td>
    				</tr>
    				<tr>
    					<td><input type="Button" id="berechnen" value="Berechnen" onclick="rechnen()"></td>
    				</tr>
    			</table>
    		</form>
    		<!--<form name="Auswahl">
    			<table>
    				<tr>
    					<td>Metallbarren:</td>
    					<td><input type="radio" id="Metallzeit" value="Auswählen" name="Metallzeit"><input type="hidden" value="20" id="zeitmetall">
    				</tr>
    			</table>
    		</form>-->
    	</body>
    </html>
    
    1. Hallo

      habe es nun hinbekommen mit einer anderen art von For Schleife

      naja, einer eher überflüssigen Art.

      Gruß Jürgen

    2. Guten Abend allerseits.

      Off-Topic, aber ich würde an dieser Stelle gerne anmerken, dass die in diesem Thread geposteten Code-Schnippsel aus meiner Sicht ein gutes Argument darstellen gegen den automatischen Zeilenumbruch in den Code-Blöcken...

      Hatte mich dazu ja schonmal im Meta-Forum geäußert, aber das Ganze ist wohl irgendwie im Sande verlaufen.

      Vielleicht kann mich ja jemand auf den neuesten Stand bringen, ob die Idee grundsätzlich vom Tisch ist oder sie bloß nicht weiter verfolgt wurde... ;-)

      Gruß,

      HAL

      1. Hallo (,

        Vielleicht kann mich ja jemand auf den neuesten Stand bringen, ob die Idee grundsätzlich vom Tisch ist oder sie bloß nicht weiter verfolgt wurde... ;-)

        Da dort keinerlei Einigung erziehlt wurde habe an ich nichts dergleichen gearbeitet.

        LG,
        CK