Sprawdzenie czy liczba jest dodatnia

0

Dlaczego tak prosta funkcja nie dziala zanczy pomija if przy dodatniej wartości liczby... co bym nie wpsal w pole zwraca "nie dodatnia"

var liczba = document.getElementById("cyfra").Value ;
 
function dolar()

{
    
        if(liczba>0)
        
        document.getElementById("wynik").innerHTML="dodatnia";

        else 
        
        document.getElementById("wynik").innerHTML="nie dodatnia";
        
}
0
var liczba = document.getElementById("cyfra").textContent;
1

Na początek nie tak:

var liczba = document.getElementById("cyfra").Value ;

tylko:

var liczba = document.getElementById("cyfra").value ;
3

Javascript pod spodem "dodaje średnik" dla każdej linijki kodu, więc w Twoim przypadku if nie ma ciała.

jeśli chciałbyś zrobić ifa bez klamerek, to musisz umieścić wszystko w jednej linii

if (costam) jakasFunkcja()
else innaFunkcja()

u Ciebie jest

if(liczba>0); // nic, koniec warunku

document.getElementById("wynik").innerHTML="dodatnia"; // to wykonuje się poza ciałem ifa, więc wynik ma wartość "dodatnia"

else; // ten przypadek nie jest brany pod uwagę, bo nie ma ciała

document.getElementById("wynik").innerHTML="nie dodatnia"; // a to się wykona zawsze (o ile nic innego się po drodze nie wykrzaczy), więc zawsze element "wynik" będzie miał wartość "nie dodatnia"


Ale zdecydowanie odradzam ze względu na czytelność. Używaj klamerek. Zawsze.

if (costam) {
  jakasFunkcja()
}

W Twoim przypadku na pierwszy rzut oka widzę .Value zamiast .value ale to szczegół, bo elementy tekstowe nie mają czegoś takiego, jak value. Mogą mieć data-attributes, textContent, albo innerHtml, albo id, albo...

Inputy itp. mają value.

W tym przypadku powinieneś wykonać

document.getElementById("cyfra").textContent

Tylko weź poprawkę na to, że textContent jest typu string i jeżeli chciałbyś np. zsumować 2 liczby

var liczba1 = document.getElementById('#liczba1').textContent // niech ma wartość 8
var liczba2 = document.getElementById('#liczba1').textContent // niech ma wartość 3

var wynik = liczba1 + liczba2 // i tu zamiast wykonać 8 + 3 = 11, nastąpi interpolacja stringów i wynik będzie równy 83.

Powinieneś też zrzutować wartość na typ number, np jeżeli liczba jest całkowita.

parseInt(document.getElementById('#liczba1').textContent)

Lub jeżeli jest zmiennoprzecinkowa, np 3.5

parseFloat(document.getElementById('#liczba1').textContent)

#edit

No i jeszcze nazwa tematu - nic nie mówi, jak ktoś będzie miał podobny problem, to nie znajdzie Twojego tematu i założy kolejny, i kolejny [...]

0

Dziekuje wszytskim za podpowiedzi ,problem był jednak taki ze funkcja nie widziała zadeklarowanej zmiennej globalnej wsumie nie wrozumie czemu...?

0
mister_tornister napisał(a):

Javascript pod spodem "dodaje średnik" dla każdej linijki kodu, więc w Twoim przypadku if nie ma ciała.

jeśli chciałbyś zrobić ifa bez klamerek, to musisz umieścić wszystko w jednej linii

if (costam) jakasFunkcja()
else innaFunkcja()

u Ciebie jest

if(liczba>0); // nic, koniec warunku

document.getElementById("wynik").innerHTML="dodatnia"; // to wykonuje się poza ciałem ifa, więc wynik ma wartość "dodatnia"

else; // ten przypadek nie jest brany pod uwagę, bo nie ma ciała

document.getElementById("wynik").innerHTML="nie dodatnia"; // a to się wykona zawsze (o ile nic innego się po drodze nie wykrzaczy), więc zawsze element "wynik" będzie miał wartość "nie dodatnia"


Ten post powinien być usunięty jako szkodliwy - połowa postu to kłamstwa. Po pierwsze to nie jest takie proste jak "javascript dodaje średnik do każdej linijki" - jest kilka reguł kiedy średnik jest dodany i są opisane tutaj: https://262.ecma-international.org/7.0/#sec-rules-of-automatic-semicolon-insertion

W przypadku ifa średniki nie są dodawane i nie są tu potrzebne; gdyby były to linijka z "else" wyrzuciłaby błąd Uncaught SyntaxError: Unexpected token 'else'.

0
Gumol1988 napisał(a):

Dlaczego tak prosta funkcja nie dziala zanczy pomija if przy dodatniej wartości liczby... co bym nie wpsal w pole zwraca "nie dodatnia"

var liczba = document.getElementById("cyfra").Value ;
 
function dolar()

{
    
        if(liczba>0)
        
        document.getElementById("wynik").innerHTML="dodatnia";

        else 
        
        document.getElementById("wynik").innerHTML="nie dodatnia";
        
}

Myślę że możesz poprawić kilka rzeczy, na początek, pamiętaj że atrybuty w JavaScript są pisane tzw. camelCase'em, tzn wartość której szukasz najpewniej jest w .value (a nie w .Value). Są języki które ignorują wielkość liter, ale JavaScript nie jest jednym z nich.

Dodatkowo, raczej korzystaj z innerText żeby podmienić wartość tekstową róznych elementów, uciekaj się do .innerHTML dopiero w ostateczności (to może powodować różne niefajne problemy z wyświetlaniem treści, jeśli niepoprawnie się obsłuży różne wartości).

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