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

Prośba o wytłumaczenie zadania 1 (Kurs p. Mirosława JavaScript odcinek 2)

Object Storage Arubacloud
0 głosów
531 wizyt
pytanie zadane 29 czerwca 2015 w JavaScript przez Lampek Nowicjusz (120 p.)

Cześć, to mój pierwszy wpis na tym forum :) Zapoznałem się z jego zawartością, tak samo jak komentarzami pod filmem, ale nie znalazłem odpowiedzi na nurtujące mnie pytania.

Po pierwsze:

Formularz działa poprawnie tylko wtedy, kiedy umieszczę linijkę else if (liczba=="") PRZED linijką z else if (liczba==0). W odwrotnym wypadku - nie działa. Dlaczego?

Jest jakaś zasada pierwszeństwa/kolejności? Czy to w ogóle dobrze rozwiązane zadanie (chodzi mi o optymalny kod, coś bez żadnych "ale")? Dawno temu przerabiałem kurs C++, czy odpowiedzi szukać tam? Będę wdzięczny za wszystkie wskazówki jak to zrobić "zgodnie z zasadami sztuki" :).

Po drugie:

Da się dodać jakąś walidację wpisywania liczb z ułamkami? Jeśli rozdzielamy cyfry ułamka kropką, wszystko działa (0.6, 1.5), ale nie działa, jeśli użyjemy przecinka (0,6 daje wartość "zero" w komunikacie). W Polsce przyjęło się używanie "przecinka" dla rozdzielenia całości od liczb dziesiętnych. Jak to ograć?

--- MÓJ KOD ---

<!DOCTYPE html>
<html lang="pl">

    <head>
        <meta charset="utf-8" />
        
        <script type="text/javascript" >
        
            function sprawdz()
            {
                var liczba = document.getElementById("pole").value;
                
                if (liczba>0)  
                document.getElementById("wynik").innerHTML="dodatnia";
                else if (liczba<0)
                document.getElementById("wynik").innerHTML="ujemna";
                else if (liczba=="")
                document.getElementById("wynik").innerHTML="Uzupełnij pole!";
                else if (liczba==0)
                document.getElementById("wynik").innerHTML="zero";
                else
                document.getElementById("wynik").innerHTML="Ej, to nie jest liczba. Liczba ma być!";
            
            }
        
        </script>
        
    </head>

    <body>
    
    <input type="text" id="pole" />
    <input type="submit" value="Sprawdź" onclick="sprawdz()"/>
    
    <div id="wynik"></div>
    
    
    
    </body>

</html>

3 odpowiedzi

+2 głosów
odpowiedź 29 czerwca 2015 przez Comandeer Guru (601,110 p.)
Weź to pytanie napisz normalnie, bo jest nie do odczytania obecnie…
komentarz 29 czerwca 2015 przez Lampek Nowicjusz (120 p.)
Już poprawione, skomentowałeś zanim zdążyłem kliknąć na "Edycja" - nieźle :)
komentarz 29 czerwca 2015 przez Comandeer Guru (601,110 p.)

Ok, to jedziemy ;)

  • Dla JS warunek string == '' i string == 0 są de facto tożsame, z powodu dynamicznego typowania. Bardziej pewnym sposobem sprawdzenia czy pole jest puste jest sprawdzenie czy string.length === 0 - wówczas wiadomo, że jest pusty. Przed innymi sprawdzeniami (czyli czy jest równe 0 itd.) polecam przepuścić to przez parseInt, żeby na pewno otrzymać liczbę.
  • Po prostu na start zamieniać wszystkie przecinki na kropki przy pomocy string.replace:
    string = string.replace(',', '.');

     

komentarz 29 czerwca 2015 przez Lampek Nowicjusz (120 p.)

Świetnie, dzięki! Zrobiłem co trzeba, zastosowałem też string.replace.

Mogę wiedzieć jeszcze, co to znaczy "przepuścić przez parseInt"? Jak to zapisać w kodzie, w którym momencie? 

Teraz mam tak:

 

function sprawdz()
			{
				var liczba = document.getElementById("pole").value;
				var liczba = liczba.replace(",",".");
				
				if (liczba.length === 0)
				document.getElementById("wynik").innerHTML="Uzupełnij pole!";
				else if (liczba>0)  // ponieważ są tylko jedne instrukcje dla każdej wartości, klamry {} są zbędne. Gdyby jednak przy jakiejś wartości przeglądarka miała wykonać więcej czynności, klamry są obowiązkowe.
				document.getElementById("wynik").innerHTML="dodatnia";
				else if (liczba<0) 
				document.getElementById("wynik").innerHTML="ujemna";
				else if (liczba==0)
				document.getElementById("wynik").innerHTML="zero";
				else
				document.getElementById("wynik").innerHTML="Ej, to nie jest liczba. Liczba ma być!";
			
			}

 

komentarz 29 czerwca 2015 przez Lampek Nowicjusz (120 p.)
Nevermind - już wykminiłem.

 

Dzięki za pomoc!
+1 głos
odpowiedź 29 czerwca 2015 przez Grzesiek Eleryk Mądrala (6,820 p.)
Sprawdzaj czy podana wartość jest liczbą za pomocą operatora typeof : https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Operatory/Operator_typeof
komentarz 29 czerwca 2015 przez Lampek Nowicjusz (120 p.)
Dzięki, też działa :)
0 głosów
odpowiedź 29 czerwca 2015 przez Grzesiek Eleryk Mądrala (6,820 p.)
Jeśli piszesz w taki sposób to używaj komentarzy, które jak myślę zostaną ładnie sformatowane.
komentarz 29 czerwca 2015 przez Lampek Nowicjusz (120 p.)
Misclick, już poprawione ;)

Podobne pytania

0 głosów
1 odpowiedź 237 wizyt
0 głosów
1 odpowiedź 474 wizyt
0 głosów
4 odpowiedzi 394 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...