matze511: Fehler in der sel.onchange

Beitrag lesen

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;
    }
  }
}