Antwort an „matze511“ verfassen

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;
    }
  }
}
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen