Walidacja formularza za pomocą true/false

0

Witam.

Ostatnio miałem problem ze stworzeniem walidacji do swoich funkcji obliczających obwód, pole i objętość prostopadłościanu. Udało mi się to zrobić dzięki kilku przykładom na internecie którymi się zasugerowałem. Niestety takie podstawianie innego kodu do swojego poskutkowało tym że nie rozumiem za bardzo jak działa zmienna "sprawdzanie" która sprawdza czy warunek jest true czy false:

<body style="background: #f8f3e6;">
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="utf-8" />
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="a" /><br />
        Podaj b: <input type="text" name="b" /><br />
        Podaj H: <input type="text" name="H" /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>

    <div id="wynik"></div>
    <script type="text/javascript">
        var a = document.przeliczanie.a;
        var b = document.przeliczanie.b;
        var H = document.przeliczanie.H;
        var o = document.getElementById("obw");
        var p = document.getElementById("pole");
        var v = document.getElementById("obj");
        var sprawdzenie = false;

        function obwod(a, b, H) {
            var obw;
            var d = Number(a.value);
            var f = Number(b.value);
            var e = Number(H.value);
            return obw = 4 * d + 4 * f + 4 * e;
        }

        function pole(x, y, z) {
            var pole;
            var d = Number(x.value);
            var f = Number(y.value);
            var e = Number(z.value);
            return pole = 2 * d * f + 2 * f * e + 2 * d * e;
        }

        function obj(x, y, z) {
            var obj;
            var d = Number(x.value);
            var f = Number(y.value);
            var e = Number(z.value);
            return obj = d * e * f;
        }

        function licz_obwod() {
            if (sprawdzenie == true) {
                Sprawdz_ponownie();
                if (sprawdzenie == true) {
                    document.getElementById("wynik").innerHTML = "<br>Obwód prostopadłościanu jest równy: " + obwod(a,b,H);
                    return false;
                }
                else {
                    Sprawdz_ponownie();
                    return false
                }
            }
            else {
                Sprawdz_ponownie();
                return false
            }
        }

        function licz_pole() {
            if (sprawdzenie == true) {
                Sprawdz_ponownie();
                if (sprawdzenie == true) {
                    document.getElementById("wynik").innerHTML = "<br>Pole prostopadłościanu jest równe: " + pole(a, b, H);
                    return false;
                }
                else {
                    Sprawdz_ponownie();
                    return false
                }
            }
            else {
                Sprawdz_ponownie();
                return false
            }
        }

        function licz_objetosc() {
            if (sprawdzenie == true) {
                Sprawdz_ponownie();
                if (sprawdzenie == true) {
                    document.getElementById("wynik").innerHTML = "<br>Objętość prostopadłościanu jest równa: " + obj(a, b, H);
                    return false;
                }
                else {
                    return false
                }
            }
            else {
                Sprawdz_ponownie();
                return false
            }
        }

        function Sprawdz()
        {
            if (isNaN(this.value))
            {
                alert("Wprowadź daną liczbową!");
                sprawdzenie = false;
                return false;
            }
            else if (this.value < 0)
            {
                alert("Podana przez Ciebie liczba jest mniejsza od zera! Podaj większą wartość!");
                sprawdzenie = false;
                return false;
            }
            else if (this.value == 0) {
                alert("Podana przez Ciebie liczba jest równa 0! Podaj większą wartość!");
                sprawdzenie = false;
                return false;
            }
            else {
                sprawdzenie = true;
                return false;
            };
        }

        function Sprawdz_ponownie() {
            if (isNaN(a.value) || isNaN(b.value) || isNaN(H.value)) {
                alert("Wprowadź daną liczbową!");
                sprawdzenie = false;
                return false;
            }
            else if (a.value < 0 || b.value < 0 || H.value < 0) {
                alert("Podana przez Ciebie liczba jest mniejsza od zera! Podaj większą wartość!");
                sprawdzenie = false;
                return false;
            }
            else if (a.value == 0 || b.value == 0 || H.value == 0) {
                alert("Zanim obliczysz, uzupełnij wszystkie pola!");
                sprawdzenie = false;
                return false;
            }
            else {
                sprawdzenie = true;
                return false;
            };
        }

        o.onclick = licz_obwod;
        p.onclick = licz_pole;
        v.onclick = licz_objetosc;
        a.onblur = Sprawdz;
        b.onblur = Sprawdz;
        H.onblur = Sprawdz;
    </script>
</body>
</html>

Mam kilka pytań odnośnie jak to działa i dlaczego tak:

1. Kiedy wystąpi wartość true? W ifie wpisałem tylko (sprawdzanie == true) ale kiedy to się stanie? Gdzie to jest określone, dla jakich wartości przyjmuje false (to jestem jeszcze w stanie się domyślić nie wiem czy słusznie) a dla jakich true?

2. Do czego służy ostatnia linijka w funkcji Sprawdz i Sprawdz_ponownie, mianowicie:

 else {
                sprawdzenie = true;
                return false;
            };

3. Ostatnie pytanie, dlaczego po zastosowaniu kodu poniżej (ten sam program z innym sposobem zabezpieczenia danych) po jednokrotnym kliknięciu przycisku obliczania np. OBWODU, i wystąpienia błędu (w alercie), a następnie kolejnym kliknięciu przycisku obliczania OBWODU wypisuje już:

Wynik: NaN

A nie kolejnego alerta?

Podaje drugi kod:

<!DOCTYPE html>

<html lang="pl">
<head>
    <meta charset="utf-8" />
    <title>Sprawdzian</title>
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="licz1" id="a" onblur="Sprawdzenie(this.value)" /><br />
        Podaj b: <input type="text" name="licz2" id="b" onblur="Sprawdzenie(this.value)" /><br />
        Podaj H: <input type="text" name="licz3" id="H" onblur="Sprawdzenie(this.value)" /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>

    <div id="wynik"></div>
    <script type="text/javascript">
		
        function obwod() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
			var x3 = Number(document.getElementById('H').value);
			var obw = 4 * x1 + 4 * x2 + 4 * x3;
			document.getElementById('wynik').innerHTML = "Wynik: " + obw;
			return false;
        }

        function pole() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
			var x3 = Number(document.getElementById('H').value);
            var pole = 2 * x1 * x2 + 2 * x2 * x3 + 2 * x1 * x3;
			document.getElementById('wynik').innerHTML = "Wynik: " + pole;
			return false;
        }

        function obj() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
			var x3 = Number(document.getElementById('H').value);
            var obj = x1 * x3 * x2;
			document.getElementById('wynik').innerHTML = "Wynik: " + obj;
			return false;
        }
		
			function Sprawdzenie(Dana)
		{
            if (Dana == "") 
			{
                alert("Wprowadz cyfre!!!");
                return false;
            }
            if (!isNaN(Dana)) 
			{
                return false;
            }
            else alert("Podane wartosci nie mogą być literami!!");
		}
		
		document.getElementById('obw').onclick = obwod;
		document.getElementById('pole').onclick = pole;
		document.getElementById('obj').onclick = obj;
       
    </script>
</body>
</html>

Bardzo proszę o pomoc gdyż chciałbym to zrozumieć. Z góry dziękuję.

1
Maximinus napisał(a):
  1. Ostatnie pytanie, dlaczego po zastosowaniu kodu poniżej (ten sam program z innym sposobem zabezpieczenia danych) po jednokrotnym kliknięciu przycisku obliczania np. OBWODU, i wystąpienia błędu (w alercie), a następnie kolejnym kliknięciu przycisku obliczania OBWODU wypisuje już

Przy pierwszym podaniu zlych danych wyswietla alert bo masz dodany oblur na inpucie ktory wywpluje funckje "Sprawdz" sprawdzajaca co wpisales, klikasz "OK" ale niepoprawne dane w inpucie zostają ( nie sa wyczyszczone ) nastepnie przechodzisz dalej wypelniasz kolejne pola i klikasz np. "Obwód" i obwód jest liczony na podstawie nie poprawnych danych czyli liczba * litera i dlatego masz NaN which means is not a number.

masz tu "poprawioną" jesli mozna to tak nazwac wersje ktora czysci input jesli zostala podana nieprawidlowa wartosc, unikniesz NaN, ale nadal zostaje blad poniewaz jesli nie uzupelnisz z powrotem inputa poprawna wartoscią zostaje pusty co skutkuje 0 przy obliczaniu objetosci, dopisz jesze jedna funkcje ktora bedzie sprawdzac czy x1, x2, x3 jest poprawnym integerem zeby tego uniknac

dawno nie widzialem tak ch***wego kodu :|

 

<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
    <title>Sprawdzian</title>
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="licz1" id="a" onblur="Sprawdzenie(this.value, this.id)" /><br />
        Podaj b: <input type="text" name="licz2" id="b" onblur="Sprawdzenie(this.value, this.id)" /><br />
        Podaj H: <input type="text" name="licz3" id="H" onblur="Sprawdzenie(this.value, this.id)" /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>


<script type="text/javascript">
 
        function obwod() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var obw = 4 * x1 + 4 * x2 + 4 * x3;
            document.getElementById('wynik').innerHTML = "Wynik: " + obw;
            return false;
        }
 
        function pole() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var pole = 2 * x1 * x2 + 2 * x2 * x3 + 2 * x1 * x3;
            document.getElementById('wynik').innerHTML = "Wynik: " + pole;
            return false;
        }
 
        function obj() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var obj = x1 * x3 * x2;
            document.getElementById('wynik').innerHTML = "Wynik: " + obj;
            return false;
        }
 
        function Sprawdzenie(Dana, inputId)
        {
            if (Dana == "") 
            {
                alert("Wprowadz cyfre!!!");
                return false;
            }
            if (!isNaN(Dana)) 
            {
                return false;
            }
            else{
              alert("Podane wartosci nie mogą być literami!!");
              document.getElementById(inputId) .value = null;
            } 
        }
 
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;

  </script>
</body>
</html>

1

W sumie to walidacja nie jest tu w ogóle potrzebna - poniżej kod bez powtarzania się, bez instrukcji warunkowych, bez efektów ubocznych poza event handlerem:
http://codepen.io/anon/pen/QNQrYX?editors=1010

2

Lekka walidacja jednak jest potrzebna (nie może być liczb ujemnych), dodałem:
http://codepen.io/anon/pen/EKQRam?editors=1010

0

@coconuts

Zrobiłem tak by wyskakiwał błąd jeżeli co najmniej jedna wartość jest równa 0, jednak teraz, gdy wszystki 3 wartości są większe od 0 czyli są poprawe, strona się refreshuje i nic nie wypisuje :(

edit: Udało się, wystarczyło usunąć ifa z (!isNaN)

Ale chciałbym się jeszcze dowiedzieć czy dałoby się te warunki upakować jakoś w funkcje bo za każdym razem jak tworzyłem funkcje do tego programu to nigdy nie umiałem poprawnie wywołać funkcji obliczającej daną rzecz :/

<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
    <title>Sprawdzian</title>
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="licz1" id="a" onblur="Sprawdzenie(this.value, this.id)" /><br />
        Podaj b: <input type="text" name="licz2" id="b" onblur="Sprawdzenie(this.value, this.id)" /><br />
        Podaj H: <input type="text" name="licz3" id="H" onblur="Sprawdzenie(this.value, this.id)" /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>
 
 
<script type="text/javascript">
 
        function obwod(inputId) {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var obw = 4 * x1 + 4 * x2 + 4 * x3;

           if (x1 <= 0 || x2 <= 0 || x3 <= 0) 
            {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
           
			else
			{
			document.getElementById('wynik').innerHTML = "Wynik: " + obw;
			return false;
			}
			
        }
 
        function pole() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var pole = 2 * x1 * x2 + 2 * x2 * x3 + 2 * x1 * x3;
			
            if (x1 <= 0 || x2 <= 0 || x3 <= 0) 
            {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
           
			else
			{
			document.getElementById('wynik').innerHTML = "Wynik: " + pole;
			return false;
			}
			
        }
 
        function obj() {
            var x1 = Number(document.getElementById('a').value);
            var x2 = Number(document.getElementById('b').value);
            var x3 = Number(document.getElementById('H').value);
            var obj = x1 * x3 * x2;
            
			if (x1 <= 0 || x2 <= 0 || x3 <= 0) 
            {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
           
			else
			{
			document.getElementById('wynik').innerHTML = "Wynik: " + obj;
			return false;
			}
        }
 
        function Sprawdzenie(Dana, inputId)
        {
            if (Dana == "") 
            {
                alert("Wprowadz cyfre!!!");
                return false;
            }
            if (!isNaN(Dana)) 
            {
                return false;
            }
            else{
              alert("Podane wartosci nie mogą być literami!!");
              document.getElementById(inputId) .value = null;
            } 
        }
 
        
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;

 
  </script>
</body>
</html>
1
Maximinus napisał(a):

edit: Udało się, wystarczyło usunąć ifa z (!isNaN)

Ale chciałbym się jeszcze dowiedzieć czy dałoby się te warunki upakować jakoś w funkcje bo za każdym razem jak tworzyłem funkcje do tego programu to nigdy nie umiałem poprawnie wywołać funkcji obliczającej daną rzecz :/

No dokladnie tak jak mowisz zamiast kopiowac kod powinienes napisac osobną jedna funkcje ktora sluzy do walidacji. I nastepnie w kazdej z funkcji obwod(), pole(), objetosc() wywolac funkcje do walidacji na kazdym parametrze x1, x2, x3 i jesli zwroci true dla wszystkich pozwolic wykonac obliczenia, cos w tym stylu:

 
 function validate(x){
    //tutaj logika odpowiadajaca za sprawdzenie czy parametr jest liczba calkowita, jesli tak return true, jesli nie return false 
 }

 function pole() {
    var x1 = Number(document.getElementById('a').value);
    var x2 = Number(document.getElementById('b').value);
    var x3 = Number(document.getElementById('H').value);
    
    if( validate(x1) && validate(x2) && validate(x3) ){
       var pole = 2 * x1 * x2 + 2 * x2 * x3 + 2 * x1 * x3;
       document.getElementById('wynik').innerHTML = "Wynik: " + pole;
       return false;
    }else{
       //tutaj alert 
    }

 }

to samo robisz w obwod() i objetosc()

0

@coconuts Dzięki! Ostatnie pytanie mam, o rejestrowaniu zdarzeń.

Otóż jeśli nie chcę żeby zdarzenie onblur rejestrowało mi się w linii (w kodzie HTML) tylko w skrypcie (tak jak to zrobiłem dla onclicka np.) to jakie wartości tu muszę pozmieniać żeby działało?

Bo ten kod nie działa. Usunąłem rzecz jasna onblura z inputów, i argumenty funkcji ale dalej nie działa. Znaczy błędy wywala (tylko o literach i pustym znaku, więc funkcje Sprawdzenie zrobiłem ok, ale funkcji validate już jakby w ogóle nie przyjmuje), ale wyniku nie wypisuje wcale :(

Przykładowy kod dla obwodu:

<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="a" id="a"  /><br />
        Podaj b: <input type="text" name="b" id="b"  /><br />
        Podaj H: <input type="text" name="H" id="H"  /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>
 
<script type="text/javascript">
 
		var a = document.przeliczanie.a;
        var b = document.przeliczanie.b;
        var H = document.przeliczanie.H;
 
        function obwod(a, b, H) {
		
            var x1 = Number(a.value);
            var x2 = Number(b.value);
            var x3 = Number(H.value);
            
			if( validate(x1) && validate(x2) && validate(x3) ){   
			var obw = 4 * x1 + 4 * x2 + 4 * x3;
            document.getElementById('wynik').innerHTML = "Wynik: " + obw;
            return false;
			}
			else
			{
			alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
			return false;
			}
			
        }

////inne funkcje np. pole() i objetosc()//

 function Sprawdzenie()
        {
            if (this.value == "" ) 
            {
                alert("Wprowadz cyfre!!!");
                return false;
            }
            if (!isNaN(this.value)) 
            {
                return false;
            }
            else{
              alert("Podane wartosci nie mogą być literami!!");
              document.getElementById(this.id) .value = null;
            } 
        }
		
		function validate() 
		{
			if (a.value <= 0 || b.value <= 0 || H.value <= 0)
            {               
                return false;
            }
            else
			{
                return true;
            }
		
		}
				
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;
		
		a.onblur = Sprawdzenie;
        b.onblur = Sprawdzenie;
        H.onblur = Sprawdzenie;

 
  </script>
</body>
</html>

Próbowałem jeszcze tak:

<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="a" id="a"  /><br />
        Podaj b: <input type="text" name="b" id="b"  /><br />
        Podaj H: <input type="text" name="H" id="H"  /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>
 
 
<script type="text/javascript">
 
		var a = document.przeliczanie.a;
        var b = document.przeliczanie.b;
        var H = document.przeliczanie.H;
 
        function obwod(a, b, H) {
		
            var x1 = Number(a.value);
            var x2 = Number(b.value);
            var x3 = Number(H.value);
            var obw = 4 * x1 + 4 * x2 + 4 * x3;
			
			
			
        }
 
		 function licz_obwod() {
            if( validate(x1) && validate(x2) && validate(x3) ){   
			
            document.getElementById('wynik').innerHTML = "Wynik: " + obwod(a, b, H);
            return false;
			}
			else
			{
			alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
			return false;
			}
        }

////inne funkcje np. pole() i objetosc()//

        function Sprawdzenie()
        {
            if (this.value == "" ) 
            {
                alert("Wprowadz cyfre!!!");
                return false;
            }
            if (!isNaN(this.value)) 
            {
                return false;
            }
            else{
              alert("Podane wartosci nie mogą być literami!!");
              document.getElementById(this.id) .value = null;
            } 
        }
		
		function validate() 
		{
			if (a.value <= 0 || b.value <= 0 || H.value <= 0)
            {               
                return false;
            }
            else
			{
                return true;
            }
		
		}
				
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;
		
		a.onblur = Sprawdzenie;
        b.onblur = Sprawdzenie;
        H.onblur = Sprawdzenie;

 
  </script>
</body>
</html>
1

Dalej zle zrobiles (prawie dobrze ale dalej byly bledy) , ok poprawilem twoj kod, jesli chodzi o listener dla onblur znajdz sam w google jak to zrobic nie jest to trudne, pozostale funkcje do pola i objetosci zrob analogicznie do obwodu.
Postaraj sie zrozumiec jak dziala walidacja funkcja validate(), Number.isInteger() to wbudowana funkcja javascript ktora zwraca true jesli liczba jest liczba całkowitą mniejsza lub wieksza od 0, reszte powinienes juz kojarzyc.

Ps. ten kod nie jest wzorem do nasladowania jak juz mowilem ale na potrzeby "szkolne" jest w miare akceptowalny, prawidlowo powinno to byc zrobione tak jak pokazał Ci @Maciej Cąderek


<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="a" id="a"  onblur="Sprawdzenie(this)" /><br />
        Podaj b: <input type="text" name="b" id="b"   onblur="Sprawdzenie(this)" /><br />
        Podaj H: <input type="text" name="H" id="H"   onblur="Sprawdzenie(this)" /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>
 
 
<script type="text/javascript">

        function obwod() {

            var x1 = document.getElementById('a');
            var x2 = document.getElementById('b');
            var x3 =  document.getElementById('H');

            var a = x1.value;
            var b = x2.value;
            var H = x3.value;

           if (validate(a) && validate(b) && validate(H)) {   
                var obw = 4 * a + 4 * b + 4 * H;
                document.getElementById('wynik').innerHTML = "Wynik: " + obw;
                return false;
            } else {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
        }
 
        function Sprawdzenie(input)
        {
            if(input.value.length > 0  && !validate(input.value)){
              alert("Dozwolone sa tylko liczby calkowite wieksze od 0");
              document.getElementById(input.id) .value = null;
              return false;
            }
            return false;
        }

        function validate(bok) {
            var value = parseInt(bok);
            if(!isNaN(bok) && Number.isInteger(value) && value > 0){
                return true;
            }else{
                return false;
            }
        }
 
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;
 
</script>
</body>
</html>

0

A właśnie, zapomniałbym o gotowym już kodzie :)

<!DOCTYPE html>
 
<html lang="pl">
<head>
    <meta charset="utf-8" />
</head>
<body style="background: #f8f3e6;">
    <h2> Obliczanie pola, obwodu i objętości prostopadłościanu</h2>
    <form name="przeliczanie">
        <img src="prostopadloscian.gif" alt="prostopadłościan" />
        <br />
        Podaj a: <input type="text" name="a" id="a"   /><br />
        Podaj b: <input type="text" name="b" id="b"    /><br />
        Podaj H: <input type="text" name="H" id="H"    /><br />
        <br />
        Oblicz: <br />
        <button id="obw"> OBWÓD </button> <button id="pole"> POLE </button> <button id="obj"> OBJĘTOŚC </button>
    </form>
 
    <div id="wynik"></div>
 
 
<script type="text/javascript">
       
	   	 var x1 = document.getElementById('a');
            var x2 = document.getElementById('b');
            var x3 = document.getElementById('H');
	   
        function obwod() {
		
            var a = x1.value;
            var b = x2.value;
            var H = x3.value;
 
           if (validate(a) && validate(b) && validate(H)) {   
                var obw = 4 * a + 4 * b + 4 * H;
                document.getElementById('wynik').innerHTML = "Obwód prostopadłościanu wynosi: " + obw;
                return false;
            } else {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
        }
 
		  function pole() {
			
            var a = x1.value;
            var b = x2.value;
            var H = x3.value;			
 
           if (validate(a) && validate(b) && validate(H)) {   
                var pole = 2 * a * b + 2 * b * H + 2 * a * H;
                document.getElementById('wynik').innerHTML = "Pole prostopadłościanu wynosi: " + pole;
                return false;
            } else {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
        }
 
		  function obj() {
 
            var a = x1.value;
            var b = x2.value;
            var H = x3.value;
			
           if (validate(a) && validate(b) && validate(H)) {   
                var obj = a * H * b;
                document.getElementById('wynik').innerHTML = "Objętość prostopadłościanu wynosi: " + obj;
                return false;
            } else {
                alert("Uzupełnij wszystkie pola lub upewnij się czy wartości są większe od 0");
                return false;
            }
        }
 
		
        function Sprawdzenie()
        {
            if(this.value.length > 0  && !validate(this.value)){
              alert("Dozwolone sa tylko liczby calkowite wieksze od 0");
              document.getElementById(this.id) .value = null;
              return false;
            }
            return false;
        }
 
        function validate(bok) {
            var value = parseInt(bok);
            if(!isNaN(bok) && Number.isInteger(value) && value > 0){
                return true;
            }else{
                return false;
            }
        }
		a.onblur = Sprawdzenie;
		b.onblur = Sprawdzenie;
		H.onblur = Sprawdzenie;
		
        document.getElementById('obw').onclick = obwod;
        document.getElementById('pole').onclick = pole;
        document.getElementById('obj').onclick = obj;
 
</script>
</body>
</html>

@coconuts Chyba nie masz nic przeciwko że dodałem zmienne globalne zamiast kopiować w kółko ;P ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1