Dlaczego kod javascript działa w ten sposób?

0
 <meta charset="utf-8" />
</head>
<body>
    <form name="formularz">
	
		Imię i nazwisko: <input type="text" name="osoba" id="osoba" onchange="Sprawdzenie(this.value)" onblur="Sprawdzenie(this.value)" /><br><br>
        Miejsce i data urodzenia: <input type="text" name="urodzenie" id="urodzenie"  onchange="Sprawdzenie2(this.value)"onblur="Sprawdzenie2(this.value)"/><br><br>
        Numer indeksu: <input type="text" name="numer" id="numer" onchange="validation(this.value)" /><br><br>
		
		<button name="przycisk" id="przycisk"> Pokaż dane </button><br><br>
        <div id="wynik_div"> </div>
	</form>
	
	<script>
	function Wynik() 
		{
            var im = document.getElementById('osoba').value
            var mur = document.getElementById('urodzenie').value
            var nr = document.getElementById('numer').value
            document.getElementById('wynik_div').innerHTML = "<b>Imię i nazwisko: </b>" + im + " <br><b>Miejsce i data urodzenia:</b> " + mur + " <br><b>Numer indeksu: </b>" + nr;

            return false;
        }

    function Sprawdzenie(Dana) 
		{
            if (Dana == "") 
			{
                alert("Należy wprowadzić Imie i Nazwisko!");
                return false;
            }
            if (isNaN(Dana)) 
			{
                return false;
            }
            else alert("Podane wartosci nie moga byc liczbami!!");
        }

	function Sprawdzenie2(Dana) 
		{
            if (Dana == "") 
			{
                alert("Należy wprowadzić Imie i Nazwisko!");
                return false;
			}
		}

    function validation(Dana) 
		{
            if (Dana == "") 
			{
                alert("Należy wprowadzić Numer Indeksu!");
                return false;
            } else
                if (isNaN(Dana))
				{
                    alert("Należy wpisać Numer Indeksu, jako liczbę całkowitą! (np. 16)");
                } else return false;
        }

        document.getElementById('przycisk').onclick = Wynik;
	</script>
</body>
</html>

Mam pytanie odnośnie kodu w javascript. Otóż, instrukcja warunkowa " if (Dana == "") " w funkcji validation nie jest brana pod uwagę? Jeżeli w danym okienku (inpucie) wklepiemy spację lub zostawimy pole puste to okienko z informacją "Należy wprowadzić Numer Indeksu!" nie wyskoczy, a wyskoczy DOPIERO po wpisaniu tam jakiejś cyfry/litery (wtedy owszem wyskoczy informacja z drugiego ifa czyli ("Należy wpisać Numer Indeksu, jako liczbę całkowitą! (np. 16)"); ) /albo czegokolwiek a następnie WYKASOWANIU tej cyfry/litery i zostawieniu pustego pola i kliknięciu buttona.

Innymi słowy, ostatnie pole, gdy zostawimy je puste lub wklepiemy spacje, nie zwróci błędu, a zwróci go tylko po uprzednim wpisaniu tam jakiegoś znaku, wykasowaniu go i naciśnięciu enter bądź zmienieniu focusa dla pola.

Jak to zmienić, by informacja z błędem "Należy wprowadzić Imie i Nazwisko!" wyskakiwała zawsze, a nie tylko w takim przypadku??

0

Pewnie dlatego, że przy pozostałych polach zastosowałeś "onblur" a na ostatnim polu tego nie zrobiłeś.

Swoją drogą nie powinno się korzystać z takiego sposobu obsługi zdarzeń, tylko przypisać je do pola np przy pomocy addEventListener to po pierwsze a po drugie te wyskakujące okna sa irytujące, nie lepiej wypisać informację obok pola?

0

Niestety ale musiałem tak zrobić gdyż nauczyciel tego wymagał :(

Btw. Mam jeszcze pytanie, jak wytłumaczyć komendę this.value? Co ona dokładnie robi będąc w zdarzeniu onchange? To dla mnie ważne z góry dziękuję

1

this.value wskazuje na parametr value bieżącego obiektu DOM (czyli w tym przypadku to co wpisał użytkownik), dla którego wywołane jest zdarzenie. Więcej o this znajdziesz na przykład tutaj: http://bonsaiden.github.io/JavaScript-Garden/pl/#function.this

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