matze511: Fehler in der sel.onchange

Beitrag lesen

jetzt funktioniert es! so sieht das JavaScript jetzt aus:

Quelltext hierdocument.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
  };

  selectElement.addEventListener('change', function () {
    // Disable all fields initially
    const allFields = ["#grundmaß", "#traufhoehe", "#firsthoehe", "#dachueberstand", "#dachneigung", "#okFußpfette", "#okFirstpfette"];
    allFields.forEach(id => document.querySelector(id).setAttribute('disabled', 'disabled'));

    // Enable relevant fields
    const selectedOption = this.value;
    if (config[selectedOption]) {
      config[selectedOption].forEach(id => document.querySelector(id).removeAttribute('disabled'));
    }
  });

  document.querySelector('input[type="button"]').addEventListener('click', function () {
    BerechnungderSparrenmaße(selectElement.value);
  });
});


        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, wenn der Wert ungültig ist
                }
                return floatValue;
            } else {
                console.error("Element nicht gefunden: " + id);
                return 0;
            }
}

function berechneLotrechtesObholz(sparrenhoehe, klauentiefe, dachneigung) {
    return (sparrenhoehe - klauentiefe) / Math.cos(dachneigung);
}



function BerechnungderSparrenmaße(selectedValue) {
  console.log("Berechnung gestartet für:", selectedValue);

  // Gemeinsame Variablen 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 raumhoeheRohbau = getFloatValue("raumhoeheRohbau");
  const sparrenhoehe = getFloatValue("sparrenhoehe");
  const klauentiefe = getFloatValue("klauentiefe");
  const firstpfettenbreite = getFloatValue("firstpfettenbreite");
  const firsthoehe = getFloatValue("firsthoehe");
  const okFusspfette = getFloatValue("okFußpfette");

  // Berechnungen je nach Auswahl
  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;

      document.getElementById("firsthoehe").value = firsthoeheCalc.toFixed(3);
      document.getElementById("okFußpfette").value = okFusspfetteCalc.toFixed(3);
      document.getElementById("okFirstpfette").value = okFirstpfetteCalc.toFixed(3);
      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;

      document.getElementById("dachneigung").value = (dachneigungCalc * 180 / Math.PI).toFixed(2);
      document.getElementById("okFußpfette").value = okFusspfette2.toFixed(3);
      document.getElementById("okFirstpfette").value = okFirstpfette2.toFixed(3);
      break;

    // Weitere Fälle können analog hinzugefügt werden
    default:
      console.warn("Keine Berechnung für diesen Fall implementiert.");
  }
}