Zwei Syntax-Fragen / Formulare
tj
- javascript
Hallo ihr,
ich beginne mich gerade in Javascript zurechtzufinden.
Dazu habe ich zwei Fragen. Würde mich sehr freuen, wenn ihr mir weiterhelfen könntet:
Frage 1: Warum wird im untenstehenden Code nicht bei Klick auf den Button die Hintergrundfarbe anhand der Eingabe des Users verändert? Wo liegt der Fehler?
<script type="text/javascript">
function farbeAendern()
{
f = document.getElementById('farbe').value;
document.style.backgroundColor = f;
}
</script>
<form>
<input type="text" name="farbe" id="farbe"/>
<input type="button" value="OK" onclick="farbeAendern()"/>
</form>
Frage 2:
Ich will einen einfachen Rechner verwirklichen mit zwei Formularen und einer simplen Addition. Javascript behandelt meine Variablen allerdings als Text und gibt bei 2+2 22 aus statt 4. Welchen (hoffentlich einfachen Trick) gibt es dabei?
<script type="text/javascript">
function addieren()
{
z1 = document.getElementById('zahl1').value;
z2 = document.getElementById('zahl2').value;
erg=z1+z2;
alert(erg);
}
</script>
<form>
<input type="number" name="zahl1" id="zahl1"/>
<input type="number" name="zahl2" id="zahl2"/>
<input type="button" value="Rechnen" onclick="addieren()"/>
</form>
Vielen Dank für eure Hilfe.
tj
Hi tj,
zu Deiner ersten Frage:
Frage 1: Warum wird im untenstehenden Code nicht bei Klick auf den Button die Hintergrundfarbe anhand der Eingabe des Users verändert? »»
[...]
f = document.getElementById('farbe').value;
document.style.backgroundColor = f;
[...]
Lösung: document.body.style.backgroundColor = f;
Du kannst dem Objekt document keine Style-Attribute zuweisen.
Dem body einer Seite jedoch schon.
Bei einer Fehleingabe in Deinem Formular wird meine o.g. Lösung dann auch nicht mehr helfen.
Frage 2:
Ich will einen einfachen Rechner verwirklichen mit zwei Formularen und einer simplen Addition. Javascript behandelt meine Variablen allerdings als Text und gibt bei 2+2 22 aus statt 4. Welchen (hoffentlich einfachen Trick) gibt es dabei?
function addieren()
{
z1 = document.getElementById('zahl1').value;
z2 = document.getElementById('zahl2').value;
erg=z1+z2;
alert(erg);
}
Lösung:
z1 = parseInt( document.getElementById('zahl1').value, 10 );
z2 = parseInt( document.getElementById('zahl2').value, 10 );
Deine Vermutung war richtig. Deine z-Vars sind vom Typ String.
In Javascript ist die Operation '+' gleichzeitig auch ein
Verkettungsoperator. Ergo werden die beiden String z1 und z2 miteinander
verbunden.
Abhilfe schafft hier eine Typumwandlung (type-casting) zu einem
Integer. In Javascript geht das mit der Funktion "parseInt( param1, param2 )"
param1 ist dabei due zu konvertierende Variable.
param2 ist die Basis des Zahlensystems (10=Dezimal).
Ich hoffe ich konnte Dir damit weiterhelfen.
-------------------------------------------------------------
- ATECore v1.0 (OSource) - 2012 - cr0$$
Hey cr0$$,
wow, vielen Dank für die schnelle und hilfreiche Antwort. So funktioniert das jetzt alles.
Noch eine Frage: Kann ich diesen parseInt-Schritt auch irgendwie umgehen, indem ich den Variablen irgendwie davor schon sage, dass sie eigentlich int-Variablen sein sollen?
Danke und Gruß
tj
Hallo!
Noch eine Frage: Kann ich diesen parseInt-Schritt auch irgendwie umgehen, indem ich den Variablen irgendwie davor schon sage, dass sie eigentlich int-Variablen sein sollen?
Nein. Das ist bereits die bevorzugte Methode, um ihnen zu sagen, dass sie eigentlich Integer-Variablen sein sollen.
Mathias