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

question-closed [JAVASCRIPT] Problem z wyświetleniem wartości która nie jest liczbą

+1 głos
196 wizyt
pytanie zadane 15 kwietnia 2015 w JavaScript, jQuery, AJAX przez diego16d Gaduła (3,170 p.)
zamknięte 15 kwietnia 2015 przez diego16d

Witam wszystkich serdecznie. Mam problem z zadaniem 2 (2 odcinek kursu JavaScript). Próbuję kombinować ale nie mam pojęcia co zrobić aby spełniły się następujące scenariusze:

  • Wartość w lewym polu nie jest liczbą
  • Wartość w prawym polu nie jest liczbą
  • Wartości w obu polach nie są liczbami

Dołączam kod źródłowy :

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

<meta charset="utf-8">

<script type="text/javascript">

     function wypisz()
	  {
	      var liczba1 = document.getElementById("pole1").value;
		  var liczba2 = document.getElementById("pole2").value;
		  var napis = " ";
		  
		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==liczba2))
		   {
		      document.getElementById("wynik").innerHTML= "Wartość w lewym polu nie jest liczbą !";
		   }
		   
		   else if ((liczba1==liczba1)  &&  (liczba2==" "))
		   {
		      document.getElementById("wynik").innerHTML= "Wartość w prawym polu nie jest liczbą !";
		   }
		   
		   else if (liczba1==liczba2) 
		   {
		     document.getElementById("wynik").innerHTML= "Liczby mają tę samą wartość ";
		   }  		 
			   
		   	
	   }


</script>
</head>
<body>

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


</body>
</html>

W warunkach "else if" próbowałem różnych kombinacji, ale niestety nie działa. Prosiłbym was abyście nie dawali mi od razu w 100% gotowego rozwiązania ale, dajcie jakieś wskazówki, polecenia które mógłbym wykorzystać do rozwiązania tego problemu z góry dzieki za odpowiedzi ;).

 

P.S Jestem na forum od 5 kwietnia w związku z tym gratuluję wspaniałego forum Panu Mirkowi (lubię to). Mam nadzieję że będzie się dynamicznie rozwijać ;). 

 

komentarz zamknięcia: Problem został rozwiązany.

2 odpowiedzi

+1 głos
odpowiedź 15 kwietnia 2015 przez nefil1m Stary wyjadacz (10,640 p.)

Skorzystaj z typeof.

var pole1 = document.getElementById('pole1').value;

if( typeof pole1 !== number ) {
// tu komunikat czy coś
}

Input musi mieć wtedy type="number" bo inaczej zawsze dostaniesz stringa.
Możesz też testować wartość regexem ale to trochę bardziej złożone (niewiele ale jednak;)).

komentarz 15 kwietnia 2015 przez diego16d Gaduła (3,170 p.)

Więc zmodyfikowałem swój kod tak : 

  var pole1 = document.getElementById("pole1").value;    
                                                                                                                                                                                   var pole2 = document.getElementById("pole2").value;

else if (typeof pole1 != number )
		   {
		      document.getElementById("wynik").innerHTML= "Wartość w lewym polu nie jest liczbą !";
		   }
		   
		   else if (typeof pole2 != number )
		   {
		      document.getElementById("wynik").innerHTML= "Wartość w prawym polu nie jest liczbą !";
		   }

     <input type="number" id="pole1">
     <input type="number" id="pole2">

 

I nadal jest źle, do moich okienek tekstowych dodały się strzałki dzięki którym moge zwiększać/zmniejszać wartości. Kiedy wpisuję literę do lewego lub prawego okienka to w lewym nie wyświetla się nic a w prawym zamiast litery pojawia się 0. Nie mam pojęcia jak to zrobić ;/

komentarz 15 kwietnia 2015 przez nefil1m Stary wyjadacz (10,640 p.)
Mój błąd tym razem. type="number" też zwraca stringa (czego nie wiedziałem wcześniej)

Rozwiązanie z regexpem:
http://jsfiddle.net/jLwh73q8/1/

Jak to działa nie będę dokładnie tłumaczył, polecam przerobić jakiś tutorial z tego.
komentarz 15 kwietnia 2015 przez diego16d Gaduła (3,170 p.)
Już działa musiałem odpowiednio w warunkach dopisać funkcję isNaN, która sprawdza czy zmienna NIE jest liczbą. Pomógł mi komentarz pod filmem gdzie był napisany kod, który nie spełniał wszystich wymogów co do treści zadania. Jednak była tam funkcja isNaN, która była cenną wskazówką. ;)
komentarz 15 kwietnia 2015 przez nefil1m Stary wyjadacz (10,640 p.)
O tym nie pomyślałem ;)
0 głosów
odpowiedź 15 kwietnia 2015 przez testerius Pasjonat (24,020 p.)

Najprostsze rozwiązanie, aczkolwiek w całości nie zniweluje błędnego wpisu usera to zmiana typu z text na number,

<input type="number" id="pole1">
<input type="number" id="pole1">

Po wpisaniu tekstu pojawi się oczywiście czerwone obramowanie inputa, informujące że wartość jest niezgodna. Jeśli chcesz to jakoś inaczej rozwiązać to musisz poczytać o walidacji.

Tylko tak mogę na tę chwilę pomóc, sam mam bardzo małą wiedzą o JS, dopiero co będę się uczył.

Podobne pytania

+2 głosów
3 odpowiedzi 4,772 wizyt
+10 głosów
14 odpowiedzi 775 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

62,233 zapytań

108,343 odpowiedzi

226,151 komentarzy

34,593 pasjonatów

Przeglądających: 136
Pasjonatów: 15 Gości: 121

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...