ratzekahl1
Goto Top

Javascript funktioniert nur 1x

Guten Tag,
ich habe ein komisches Problem. Ich habe 2 input number Felder. Die schreiben ein Produkt in ein drittes.
Dann noch , durch Komma ersetzt und auf 2 Nachkommastellen gesetzt. Auslöser mit onchange
Seite geladen.
Input 1 keine AHnung 2,4 eingetragen. Input 2 3 eingetragen. Wunderbar: input 3 zeigt 7,2 an.
Dann ändere ich input 1 auf 3 und input 2 auf 4 statt 12 bleibt er bei 7,2 stehen...

Das js:
<script>
	 function produkt() {
 	input1 = document.getElementById("nettopreis0").value;  
 	input2 = document.getElementById("anzahl0").value;  
	produkt=input1*input2;
	document.getElementById("sum0").value=produkt.toFixed(2).replace(".",",");  
 }
	 </script>

Das html
... <td class="datenzelle2"><input id="nettopreis0" type="number" name = "nettopreis" value="0"></td>  
   <td class="datenzelle2"><input  id="anzahl0" type="number" name = "anzahl" value="0" OnChange="produkt()"></td>  
  <td class="datenzelle2"><input readonly id="sum0" type="text" name = "summe" value="0"></td>...  

Was ist das fürn Quark?
mfG
ratzekahl

Content-Key: 5794717043

Url: https://administrator.de/contentid/5794717043

Printed on: April 27, 2024 at 19:04 o'clock

Mitglied: 5175293307
5175293307 Feb 02, 2023 updated at 11:12:19 (UTC)
Goto Top
Naja wenn man mit Strings multipliziert was erwartest du face-smile. Du solltest Daten schon in die richtigen Typen bringen (parseFloat / parseInt), doppelte Variablennamen sind auch nicht hilfreich ....
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title></title>
<script>
function product(){
	let input1 = document.getElementById("nettopreis0").value;  
 	let input2 = document.getElementById("anzahl0").value;  
	let produkt = parseFloat(input1.replace(",",".")) * parseFloat(input2.replace(",","."));  
	document.getElementById("sum0").value = produkt.toFixed(2).replace(".",",");  
}
</script>
</head>
<body>
Preis = <input id="nettopreis0" type="number" onChange="product()"/><br/>  
Anzahl = <input id="anzahl0" type="number" onChange="product()"/><br/>  
Summe = <input id="sum0" type="number" readonly/>  
</body>
</html>
wurstel
Member: godlie
godlie Feb 02, 2023 at 11:05:12 (UTC)
Goto Top
Hallo,

adde doch einfach mal einen console.log(input1,input2,produkt) in deine function produkt() dann siehste ob sie aufgerufen wird.

grüße
Member: godlie
godlie Feb 02, 2023 at 11:11:06 (UTC)
Goto Top
Hallo,

ach jetzt seh ich erst, du darfs deine Variable nicht produkt nennen, denn damit überschreibst du die produkt() function face-smile
Ich würde auch o.g. parseFloat() in betracht ziehen für die input1,input2

grüße
Member: ratzekahl1
ratzekahl1 Feb 02, 2023 at 15:45:02 (UTC)
Goto Top
Ah, Ok.
kurze Rückfragen: Javascript convertiert also nicht wie php automatisch?
Warum klappte es 1x einwandrei?
Ist es wegen dem zufällig gewählten function name? Also Durchlauf 1 ok, dan wird function durch var ersetzt?
Mitglied: 5175293307
Solution 5175293307 Feb 02, 2023 updated at 17:11:56 (UTC)
Goto Top
Zitat von @ratzekahl1:

Ah, Ok.
kurze Rückfragen: Javascript convertiert also nicht wie php automatisch?
Nein.
Warum klappte es 1x einwandrei?
Weil du beim ersten Ausführen die Funktionsdefinition selbst überschreibst.
Auch ein Grund warum man lokale Variablen besser mit let statt mit var deklariert die verhindern ein erneutes globales Deklarieren.