Kod nie działa dla liczb ujemnych

0

Nie wiem dlaczego kod ten nie działa gdy w obu polach są liczby ujemne.


<input type="text" id="pole1" />
<input type="text" id="pole2" />
<input type="submit" value="Pokaż" onclick="wypisz()"/>
<div id="wynik"></div>

		<script>

			function wypisz()
			{
				var liczba1 = document.getElementById("pole1").value;
				var liczba2 = document.getElementById("pole2").value;
				var napis = "";

				if (((isNaN(liczba1)) || (liczba1 == "")) && ((isNaN(liczba2)) || (liczba2 == "")))
				{
					document.getElementById("wynik").innerHTML = "Nieprawidłowy input w obu polach!";
				}
				else if ((isNaN(liczba1)) || (liczba1 == ""))
				{
					document.getElementById("wynik").innerHTML = "Nieprawidłowy input w polu 1!";
				}
				else if ((isNaN(liczba2)) || (liczba2 == ""))
				{
					document.getElementById("wynik").innerHTML = "Nieprawidłowy input w polu 2!";
				}
				else {

					if (liczba1 < liczba2)
					{
						for (i=liczba1; i<=liczba2; i++)
						{
							napis = napis + i + " ";
						}
						document.getElementById("wynik").innerHTML = napis;
					}
					else if (liczba1 > liczba2)
					{
						for (i=liczba1; i>=liczba2; i--)
						{
							napis = napis + i + " ";
						}
						document.getElementById("wynik").innerHTML = napis;
					}
					else if (liczba1 === liczba2) {
						document.getElementById("wynik").innerHTML = "Liczby są takie same!";
					}
				}
			}

		</script>

0

Twoje dane z inputów traktowane są jako string - zobacz, że Twój kod nie działa poprawnie jak wpiszesz liczby np 5 i 15.
Rozwiązaniem jest skonwertowanie liczba na inty -

 liczba1=parseInt(liczba1);
 liczba2=parseInt(liczba2);

Wstaw sobie te dwie linijki przed tym kodem

...
if (liczba1 < liczba2)
{
...
0

@axelbest: Dobrą praktyką jest zawsze precyzować system liczbowy przy rzutowaniu na int'a. Czasami może nam się zaplątać jakieś 0 przed liczbą (co w JavaScript wcale nie jest takie mało prawdopodobne) i wtedy parseInt(0700) da nam 448. Powodzenia w znalezieniu takiego błędu :D

Tak więc

// zamiast 
parseInt(liczba1);
// to
parseInt(liczba1, 10);
0

Dzięki wielkie za odpowiedź @axelbest i @Desu. Wczoraj 1.5 kawy nad tym siedziałem i nie mogłem znaleźć błędu ;)

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