Zjednodušení scriptu

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Wikan 11. 10. 2021 15:40

count je počet a ten se přece nezmění ať už používáš číslování 1,2,3 nebo 11,12,13
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod radekbare 12. 10. 2021 07:47

Chápu li to správně tak takto, už není chyba NaN ale nepočítá ani jeden result :oops:
Kód: Vybrat vše
<script>
      (function () {
        const weights = [202, 805, 4000];

        const count = 3;
        const selectElements = new Array(count);
        for (let i = 10; i < count; i++) {
          const element = document.getElementsByName("A" + (i + 1))[0];
          element.addEventListener("change", recalculate);
          selectElements[i] = element;
        }

        const resultElement = document.getElementById("result");
        const resultElement2 = document.getElementById("result2");

        function recalculate() {
          const values = selectElements.map((e) => Number(e.value));

          let sum = values.reduce((p, c, i) => p + c * weights[i], 0);
          sum = Math.round(sum);
          resultElement.innerText = sum.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, " ");

          resultElement2.innerText = values.reduce((p, c) => p + c, 0);
        }

        recalculate();
      })();
    </script>


-- 12. 10. 2021 09:28 --

Aha už jsem na to asi přišel, teoreticky jsem to udělal správně. Jen jsem zapoměl že se posune i řada s výpočty. Takže pokud to udělám takto tak to funguje.
Kód: Vybrat vše
<script>
      (function () {
        const weights = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 202, 805, 4000];

        const count = 13;
        const selectElements = new Array(count);
        for (let i = 10; i < count; i++) {
          const element = document.getElementsByName("A" + (i + 1))[0];
          element.addEventListener("change", recalculate);
          selectElements[i] = element;
        }

        const resultElement = document.getElementById("result");
        const resultElement2 = document.getElementById("result2");

        function recalculate() {
          const values = selectElements.map((e) => Number(e.value));

          let sum = values.reduce((p, c, i) => p + c * weights[i], 0);
          sum = Math.round(sum);
          resultElement.innerText = sum.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, " ");

          resultElement2.innerText = values.reduce((p, c) => p + c, 0);
        }

        recalculate();
      })();
    </script>
radekbare
Kolemjdoucí

Odeslat příspěvekod Wikan 12. 10. 2021 12:50

No spíš než takhle, bych nechal původní kód a změnil jenom řádek:
Kód: Vybrat vše
const element = document.getElementsByName("A" + (i + 10))[0];

Tedy (i + 1) na (i + 10).
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod radekbare 12. 10. 2021 14:12

To už jsem zkoušel, script se zasekne a nikdy nenačte hodnoty. Select jsou A11,A12,A13
Kód: Vybrat vše
<script>
      (function () {
        const weights = [202, 805, 4000];

        const count = 3;
        const selectElements = new Array(count);
        for (let i = 0; i < count; i++) {
          const element = document.getElementsByName("A" + (i + 10))[0];
          element.addEventListener("change", recalculate);
          selectElements[i] = element;
        }

        const resultElement = document.getElementById("result");
        const resultElement2 = document.getElementById("result2");

        function recalculate() {
          const values = selectElements.map((e) => Number(e.value));

          let sum = values.reduce((p, c, i) => p + c * weights[i], 0);
          sum = Math.round(sum);
          resultElement.innerText = sum.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, " ");

          resultElement2.innerText = values.reduce((p, c) => p + c, 0);
        }

        recalculate();
      })();
    </script>
radekbare
Kolemjdoucí

Odeslat příspěvekod Wikan 12. 10. 2021 15:07

Jasně, chyba. Ne +10 ale +11.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod radekbare 14. 10. 2021 09:08

JJ to je ono, děkuji moc ;-)
radekbare
Kolemjdoucí

Předchozí stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků