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-ID: 5794717043

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

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

5175293307
5175293307 02.02.2023 aktualisiert um 12:12:19 Uhr
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
godlie
godlie 02.02.2023 um 12:05:12 Uhr
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
godlie
godlie 02.02.2023 um 12:11:06 Uhr
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
ratzekahl1
ratzekahl1 02.02.2023 um 16:45:02 Uhr
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?
5175293307
Lösung 5175293307 02.02.2023 aktualisiert um 18:11:56 Uhr
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.