@@ -19,24 +19,21 @@ <h1>Potenzieller Immo-Kauf</h1>
1919
2020 <!-- Eingabensektion -->
2121 < section id ="inputs ">
22- < h2 > Eingaben</ h2 >
22+ < h2 > Eingaben (Es müssen nicht nicht alle Szenarien ausgefüllt werden) </ h2 >
2323
24- <!-- Nettoeinkommen -->
24+
25+ <!-- Block 1 -->
2526 < div class ="block ">
27+ < h3 > Szenario 1 (Vergleich 1)</ h3 >
2628 < div class ="form-row ">
27- < label for ="net-income "> Nettoeinkommen (€)</ label >
29+ < label for ="net-income1 "> Nettoeinkommen 1 (€)</ label >
2830 < input
2931 type ="text "
30- id ="net-income "
31- name ="netIncome "
32- placeholder ="z.B. 1.234,56 "
32+ id ="net-income1 "
33+ name ="netIncome1 "
34+ placeholder ="z.B. 1234 oder 1.234,56 "
3335 />
3436 </ div >
35- </ div >
36-
37- <!-- Block 1 -->
38- < div class ="block ">
39- < h3 > Block 1</ h3 >
4037 < div class ="form-row ">
4138 < label for ="max-rate1 "> Max. Rate 1 (40%)</ label >
4239 < input
@@ -77,15 +74,24 @@ <h3>Block 1</h3>
7774 id ="interest-rate1 "
7875 name ="interestRate1 "
7976 step ="0.01 "
80- placeholder ="z.B. 3,00 "
81- value ="3 "
77+ placeholder ="z.B. 3 oder 3,45 "
78+ value =""
8279 />
8380 </ div >
8481 </ div >
8582
8683 <!-- Block 2 -->
8784 < div class ="block ">
88- < h3 > Block 2</ h3 >
85+ < h3 > Szenario 2 (Vergleich 2)</ h3 >
86+ < div class ="form-row ">
87+ < label for ="net-income2 "> Nettoeinkommen 2 (€)</ label >
88+ < input
89+ type ="text "
90+ id ="net-income2 "
91+ name ="netIncome2 "
92+ placeholder ="z.B. 1234 oder 1.234,56 "
93+ />
94+ </ div >
8995 < div class ="form-row ">
9096 < label for ="max-rate2 "> Max. Rate 2 (40%)</ label >
9197 < input
@@ -126,15 +132,24 @@ <h3>Block 2</h3>
126132 id ="interest-rate2 "
127133 name ="interestRate2 "
128134 step ="0.01 "
129- placeholder ="z.B. 4,00 "
130- value ="4 "
135+ placeholder ="z.B. 3 oder 3,45 "
136+ value =""
131137 />
132138 </ div >
133139 </ div >
134140
135141 <!-- Block 3 -->
136142 < div class ="block ">
137- < h3 > Block 3</ h3 >
143+ < h3 > Szenario 3 (Vergleich 3)</ h3 >
144+ < div class ="form-row ">
145+ < label for ="net-income3 "> Nettoeinkommen 3 (€)</ label >
146+ < input
147+ type ="text "
148+ id ="net-income3 "
149+ name ="netIncome3 "
150+ placeholder ="z.B. 1234 oder 1.234,56 "
151+ />
152+ </ div >
138153 < div class ="form-row ">
139154 < label for ="max-rate3 "> Max. Rate 3 (40%)</ label >
140155 < input
@@ -175,8 +190,8 @@ <h3>Block 3</h3>
175190 id ="interest-rate3 "
176191 name ="interestRate3 "
177192 step ="0.01 "
178- placeholder ="z.B. 5,00 "
179- value ="5 "
193+ placeholder ="z.B. 3 oder 3,45 "
194+ value =""
180195 />
181196 </ div >
182197 </ div >
@@ -190,7 +205,7 @@ <h3>Kosten & Laufzeiten</h3>
190205 type ="number "
191206 id ="monthly-fixed-costs "
192207 name ="monthlyFixedCosts "
193- placeholder ="z.B. 1.234,56 "
208+ placeholder ="z.B. 1234 oder 1.234,56 "
194209 step ="0.01 "
195210 />
196211 </ div >
@@ -272,29 +287,27 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
272287 <!-- Externe Skripte -->
273288 < script src ="js/berechnungen.js "> </ script >
274289 < script >
275- // Hilfsfunktion: Eingabe für Nettoeinkommen filtern
276- function filterNetInput ( ) {
277- const input = document . getElementById ( 'net-income' ) ;
278- // Nur Ziffern, Punkt und Komma zulassen
290+ // Hilfsfunktion: Eingabe für Nettoeinkommen filtern (für alle 3 Felder)
291+ function filterNetInput ( idx ) {
292+ const input = document . getElementById ( 'net-income' + idx ) ;
279293 input . value = input . value . replace ( / [ ^ \d . , ] / g, '' ) ;
280294 }
281295
282- // Hilfsfunktion: Nettoeinkommen formatieren (Dezimal- und Tausendertrennzeichen)
283- function formatNetIncome ( ) {
284- const input = document . getElementById ( 'net-income' ) ;
296+ // Hilfsfunktion: Nettoeinkommen formatieren (Dezimal- und Tausendertrennzeichen) (für alle 3 Felder)
297+ function formatNetIncome ( idx ) {
298+ const input = document . getElementById ( 'net-income' + idx ) ;
285299 let raw = input . value . replace ( / \. / g, '' ) . replace ( / , / g, '.' ) ;
286300 let num = parseFloat ( raw ) || 0 ;
287- // Format mit Tausenderpunkt und Komma
288301 const parts = num . toFixed ( 2 ) . split ( '.' ) ;
289302 const integerPart = parts [ 0 ] ;
290303 const decimalPart = parts [ 1 ] ;
291304 input . value = integerPart . replace ( / \B (? = ( \d { 3 } ) + (? ! \d ) ) / g, '.' ) + ',' + decimalPart ;
292305 }
293306
294- // Funktion, um Slider- und Absolutwerte zu aktualisieren
295- function updateSliderValue ( sliderId , valueSpanId , absSpanId ) {
307+ // Funktion, um Slider- und Absolutwerte zu aktualisieren (block-spezifisch)
308+ function updateSliderValue ( sliderId , valueSpanId , absSpanId , netIncomeId ) {
296309 const slider = document . getElementById ( sliderId ) ;
297- const raw = document . getElementById ( 'net-income' ) . value . replace ( / \. / g, '' ) . replace ( / , / g, '.' ) ;
310+ const raw = document . getElementById ( netIncomeId ) . value . replace ( / \. / g, '' ) . replace ( / , / g, '.' ) ;
298311 const net = parseFloat ( raw ) || 0 ;
299312 document . getElementById ( valueSpanId ) . textContent = slider . value ;
300313 const abs = ( net * slider . value / 100 ) . toFixed ( 2 ) ;
@@ -304,26 +317,27 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
304317
305318 // Register Slider-Events beim Laden
306319 document . addEventListener ( 'DOMContentLoaded' , function ( ) {
307- // Nettoeinkommen-Events
308- const netIncomeInput = document . getElementById ( 'net-income' ) ;
309- netIncomeInput . addEventListener ( 'input' , function ( ) {
310- filterNetInput ( ) ;
311- updateValues ( ) ;
312- // Update all max-rate sliders' absolute value
313- [ 1 , 2 , 3 ] . forEach ( i => {
314- updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` ) ;
320+ // Nettoeinkommen-Events für alle 3 Felder
321+ [ 1 , 2 , 3 ] . forEach ( i => {
322+ const netIncomeInput = document . getElementById ( 'net-income' + i ) ;
323+ netIncomeInput . addEventListener ( 'input' , function ( ) {
324+ filterNetInput ( i ) ;
325+ updateValues ( ) ;
326+ updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` , `net-income${ i } ` ) ;
327+ } ) ;
328+ netIncomeInput . addEventListener ( 'blur' , function ( ) {
329+ formatNetIncome ( i ) ;
315330 } ) ;
316331 } ) ;
317- netIncomeInput . addEventListener ( 'blur' , formatNetIncome ) ;
318332
319- // Max-Rate-Slider
333+ // Max-Rate-Slider (je Block auf das passende Nettoeinkommen)
320334 [ 1 , 2 , 3 ] . forEach ( i => {
321335 const slider = document . getElementById ( `max-rate${ i } ` ) ;
322336 slider . addEventListener ( 'input' , ( ) => {
323- updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` ) ;
337+ updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` , `net-income ${ i } ` ) ;
324338 } ) ;
325339 // Initial update
326- updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` ) ;
340+ updateSliderValue ( `max-rate${ i } ` , `max-rate${ i } -value` , `max-rate${ i } -abs` , `net-income ${ i } ` ) ;
327341 } ) ;
328342
329343 // Equity-Slider
@@ -348,7 +362,10 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
348362 // Formulareinsendung: Weiterleitung zu ergebnisse.html
349363 function submitForm ( ) {
350364 const params = new URLSearchParams ( ) ;
351- params . set ( 'netIncome' , document . getElementById ( 'net-income' ) . value ) ;
365+ // Drei separate Nettoeinkommen eintragen
366+ params . set ( 'netIncome1' , document . getElementById ( 'net-income1' ) . value ) ;
367+ params . set ( 'netIncome2' , document . getElementById ( 'net-income2' ) . value ) ;
368+ params . set ( 'netIncome3' , document . getElementById ( 'net-income3' ) . value ) ;
352369 [ 1 , 2 , 3 ] . forEach ( i => {
353370 params . set ( `maxRate${ i } ` , document . getElementById ( `max-rate${ i } ` ) . value ) ;
354371 params . set ( `equity${ i } ` , document . getElementById ( `equity-share${ i } ` ) . value ) ;
0 commit comments