Ich danke Euch! Es sieht nun so aus:
document.addEventListener('DOMContentLoaded', function () {
const selectElement = document.getElementById('wasistgegeben');
const config = {
traufhöVordachNeigung: ["#grundmaß", "#traufhoehe", "#dachueberstand", "#dachneigung"],
firsthöTraufhöVordach: ["#grundmaß", "#firsthoehe", "#traufhoehe", "#dachueberstand"],
vordachNeigungOKFußpf: ["#grundmaß", "#okFußpfette", "#dachueberstand", "#dachneigung"],
"--": [] // Default case
};
// Aktivieren/Deaktivieren von Feldern basierend auf Auswahl
selectElement.addEventListener('change', function () {
const allFields = ["#grundmaß", "#traufhoehe", "#firsthoehe", "#dachueberstand", "#dachneigung", "#okFußpfette", "#okFirstpfette"];
allFields.forEach(id => document.querySelector(id).setAttribute('disabled', 'disabled'));
const selectedOption = this.value;
if (config[selectedOption]) {
config[selectedOption].forEach(id => document.querySelector(id).removeAttribute('disabled'));
}
});
// Berechnung auslösen bei Eingabe
const form = document.getElementById("myForm");
form.addEventListener("input", function () {
const selectedValue = selectElement.value;
BerechnungderSparrenmaße(selectedValue);
});
});
// Helferfunktion: Float-Wert einlesen
function getFloatValue(id) {
const element = document.getElementById(id);
if (element) {
const value = element.value.replace(",", ".");
const floatValue = parseFloat(value);
if (isNaN(floatValue)) {
console.error("Ungültiger Wert für " + id + ": " + value);
return 0; // Rückgabe von 0 bei ungültigem Wert
}
return floatValue;
} else {
console.error("Element nicht gefunden: " + id);
return 0;
}
}
// Berechnung: Lotrechtes Obholz
function berechneLotrechtesObholz(sparrenhoehe, klauentiefe, dachneigung) {
return (sparrenhoehe - klauentiefe) / Math.cos(dachneigung);
}
// Funktion zur Berechnung der Sparrenmaße
function BerechnungderSparrenmaße(selectedValue) {
if (!selectedValue) return;
console.log("Berechnung gestartet für:", selectedValue);
// Werte einlesen
const grundmass = getFloatValue("grundmaß");
const dachneigung = getFloatValue("dachneigung") / 180 * Math.PI;
const dachueberstand = getFloatValue("dachueberstand");
const traufhoehe = getFloatValue("traufhoehe");
const fusspfettenruecksprung = getFloatValue("fußpfettenruecksprung");
const sparrenhoehe = getFloatValue("sparrenhoehe");
const klauentiefe = getFloatValue("klauentiefe");
const firstpfettenbreite = getFloatValue("firstpfettenbreite");
const firsthoehe = getFloatValue("firsthoehe");
const okFusspfette = getFloatValue("okFußpfette");
switch (selectedValue) {
case "traufhöVordachNeigung":
const firsthoeheCalc = (grundmass + dachueberstand) * Math.tan(dachneigung) + traufhoehe;
const lotrechtesObholz = berechneLotrechtesObholz(sparrenhoehe, klauentiefe, dachneigung);
const okFusspfetteCalc = ((dachueberstand + fusspfettenruecksprung) * Math.tan(dachneigung)) - lotrechtesObholz + traufhoehe;
const okFirstpfetteCalc = (grundmass - 0.5 * firstpfettenbreite + dachueberstand) * Math.tan(dachneigung) - lotrechtesObholz + traufhoehe;
updateFieldValue("firsthoehe", firsthoeheCalc);
updateFieldValue("okFußpfette", okFusspfetteCalc);
updateFieldValue("okFirstpfette", okFirstpfetteCalc);
break;
case "firsthöTraufhöVordach":
const dachneigungCalc = Math.atan((firsthoehe - traufhoehe) / (grundmass + dachueberstand));
const lotrechtesObholz2 = berechneLotrechtesObholz(sparrenhoehe, klauentiefe, dachneigungCalc);
const okFusspfette2 = ((dachueberstand + fusspfettenruecksprung) * Math.tan(dachneigungCalc)) - lotrechtesObholz2 + traufhoehe;
const okFirstpfette2 = (grundmass - 0.5 * firstpfettenbreite + dachueberstand) * Math.tan(dachneigungCalc) - lotrechtesObholz2 + traufhoehe;
updateFieldValue("dachneigung", dachneigungCalc * 180 / Math.PI);
updateFieldValue("okFußpfette", okFusspfette2);
updateFieldValue("okFirstpfette", okFirstpfette2);
break;
case "vordachNeigungOKFußpf":
const lotrechtesObholz3 = berechneLotrechtesObholz(sparrenhoehe, klauentiefe, dachneigung);
const firsthoehe3 = (grundmass - fusspfettenruecksprung) * Math.tan(dachneigung) + okFusspfette + lotrechtesObholz3;
const traufhoehe3 = okFusspfette + lotrechtesObholz3 - ((dachueberstand + fusspfettenruecksprung) * Math.tan(dachneigung));
const okFirstpfette3 = (grundmass - 0.5 * firstpfettenbreite + dachueberstand) * Math.tan(dachneigung) - lotrechtesObholz3 + traufhoehe3;
updateFieldValue("firsthoehe", firsthoehe3);
updateFieldValue("traufhoehe", traufhoehe3);
updateFieldValue("okFirstpfette", okFirstpfette3);
break;
default:
alert("Keine Berechnung für diesen Fall implementiert.");
}
}
// Helferfunktion: Werte sicher aktualisieren
function updateFieldValue(id, value) {
const field = document.getElementById(id);
if (field) {
const newValue = value.toFixed(3).replace(".", ",");
if (field.value !== newValue) {
field.value = newValue;
}
}
}