• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

HTML/JS - dodawanie zestawów pól i obliczanie iloczynu

Object Storage Arubacloud
0 głosów
704 wizyt
pytanie zadane 26 maja 2020 w JavaScript przez Bartosz Tobiasz Nowicjusz (240 p.)

Hej!

Robię mały projekcik i natrafiłem na problem frown.

Natrafiam na błąd w konsoli przeglądarki:

Zrzuty ekranu i kod błędu

Otóż chcę, aby dodawane były kolejne zestawy pól za pomocą przycisku, w których po wpisaniu przez użytkownika został obliczony iloczyn.

Mam problem jak zrobić, aby id kolejnych pól były inne od poprzednich.

Byłbym wdzięczny za odpowiedź smiley.

Jeżeli coś jest niejasne PISZ. Proszę o wybaczenie.. jestem początkujący w tej materii wink.


<html>
    <head>
        <meta charset="utf-8" />
        <title>KALKULATOREK</title>
        <script src="kalkulatorek.js"></script>
   </head>

   <body>

        <!-- div plansza przchowuje "przycisk" oraz zestawy pól -->
        <div id="plansza"></div>

        <!-- przycisk służący do dodawania kolejncyh zestawów liczb -->
        <input type="submit" id="przycisk" value="DODAJ" onclick="dodac()">

   </body>
</html>

var tresc = "";
var pole = "pole";
var j = 0;
var suma = 1;
var POLE = [];

//funkcja dodac() dodaje kolejne zestawy pól
function dodac()
{
    //pętla for dodaje kolejne pola
    for (var i=0; i<=3; i++)
	{   
        //każde pole jest typu "number" i odwołuje się do funkcji licz()
        tresc = tresc + '<input class="pola" type="number" step=0.01 onkeyup="licz()" id="'+pole+i+'">';
        document.getElementById("plansza").innerHTML = tresc;
    }

        //pole wynik
        tresc = tresc + '<input class="pola" type="text" id="wynik">';
        document.getElementById("plansza").innerHTML = tresc;

        //powoduje odstęp od kolejnych zestawów pól
        tresc = tresc + '<br>' + '<br>';
        document.getElementById("plansza").innerHTML = tresc;

    //zmienna j liczy ilość zestawów pól i pokazuje to w konsoli przeglądarki
    j++;
    console.log(j);
}

//funkcja licz() wylicza iloczyn liczb znajdujących się w <input> o id kolejno: pole0, pole1, pole2, pole3
function licz()
{   

    //pętla for pobiera wartości z pól i wpisuje je do tablicy POLE[] oraz wylicza iloczyn
    for (var i = 0; i <= 3; i++) 
    {
        POLE[i] = document.getElementById(pole[i]).value;
        iloczyn = iloczyn * POLE[i];
    }

        //wypisywanie iloczynu w kosolii przeglądarki
       console.log(iloczyn);
       document.getElementById("wynik").value = iloczyn;
}

 

1 odpowiedź

+1 głos
odpowiedź 26 maja 2020 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 26 maja 2020 przez Bartosz Tobiasz
 
Najlepsza

Przyczyną błędu jest to, że w 38 linii próbujesz pobrać element o ID "p" (przy pierwszej iteracji, na której skrypt rzuca błędem) - zmienna pole zawiera string o wartości "pole" a kolejne wartości zmiennej i odczytują kolejne znaki z tego stringa. Zamiast tego powinieneś do metody document.getElementById podawać parametr pole + i.


Poza tym, zmienna iloczyn nie jest przez Ciebie deklarowana, więc w 39 linii dostaniesz błąd ReferenceError. Stwórz więc ją np. nad pętlą.

I pamiętaj, że jeśli będziesz chciał sumować wartości, to rzutuj pobrane wartości z obiektów DOM na liczbę, ponieważ one są zwracane jako typ string. Przy m.in. mnożeniu tego problemu akurat nie ma, bo pod spodem wartość zostaje rzutowana na liczbę.

komentarz 26 maja 2020 przez Bartosz Tobiasz Nowicjusz (240 p.)

Uff... dzięki wielkie. Naprawdę pomocne i pouczające. laugh

Super, że wytłumaczyłeś to w zrozumiały dla mnie sposób. Dzięki!
Zaczynam zauważać potencjał forum. Ktoś inny dostrzeże błąd w 1 sekundę, a ktoś inny będzie się głowił nad tym 1 godzinę.


 

1
komentarz 26 maja 2020 przez ScriptyChris Mędrzec (190,190 p.)
Jeśli analizujesz kod zbyt długo, to często nie zauważasz pewnych rzeczy, które ktoś inny może zauważyć szybciej, bo spojrzy "na świeżo". Tutaj często pomaga oderwanie się od kodu i zajęcie się czymś innym, a rozwiązanie lub potencjalne sposoby rozwiązania czasem same wpadają do głowy. :) Oczywiście, kwestia doświadczenia ma znaczenie, ale z tego co zauważyłem, to wspomniana zasada "spojrzenia na świeżo" działa na różnych poziomach trudności problemu.

Podobne pytania

0 głosów
2 odpowiedzi 192 wizyt
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 30 lipca 2019 w HTML i CSS przez polak1231 Początkujący (270 p.)
+1 głos
1 odpowiedź 952 wizyt
pytanie zadane 13 grudnia 2017 w Nasze projekty przez M4tthew Gaduła (4,480 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...