IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Nefunkční podmínka v Javascript

Aktivity
Avatar
Josef Petrák:12.7.2018 11:04

Ahoj, potřeboval bych poradit, jak opravit tuto podmínku, aby fungovala. Nevím si rady s těmi závorkami a také nevím, jestli tam může být tolikrát "&&". Díky za každou radu.

Zkusil jsem:

if (((a>5)&&(a<10))&&((b>15)&&(b<20))&&(document.getElementById("test").value == "test1"))){

}

Chci docílit: Snažím se dosáhnout, aby podmínka fungovala.

 
Odpovědět
12.7.2018 11:04
Avatar
Jan Osuský
Člen
Avatar
Jan Osuský:12.7.2018 11:46

Myslím, že ti přebývá jedna závorka úplně v pravo.

 
Nahoru Odpovědět
12.7.2018 11:46
Avatar
Ota Vlna
Člen
Avatar
Odpovídá na Josef Petrák
Ota Vlna:12.7.2018 11:49

Na konci podmínky ti přebývá jedna závorka.
"&&" může být v podmínce kolikrát chceš. Ty vnitřní závorky jsou vlastně navíc, protože tam máš jenom samé && operátory, takže by podmínka měla fungovat úplně stejně i bez nich:

if(a > 5 && a < 10 && b > 15 && b < 20 && document.getElementById("test").value == "test1"){

}

Závorky uvnitř té podmínky by bylo nutné použít třeba v případě kdybys chtěl použít i logické OR.

//Tyto podmínky nejsou stejné
if(a && (b1 || b2))
if(a && b1 || b2)

//Tyto jsou
if(((a > 5) && (a < 10)) && ((b > 15) && (b < 20)))
if(a > 5 && a < 10 && b > 15 && b < 20)
 
Nahoru Odpovědět
12.7.2018 11:49
Avatar
Odpovídá na Jan Osuský
Josef Petrák:12.7.2018 11:52

Odstranil jsem závorku úplně vpravo a stejně to nejde, tak nevím.

 
Nahoru Odpovědět
12.7.2018 11:52
Avatar
Ota Vlna
Člen
Avatar
Odpovídá na Josef Petrák
Ota Vlna:12.7.2018 11:56

Můžeš poslat celý kód?

 
Nahoru Odpovědět
12.7.2018 11:56
Avatar
Odpovídá na Josef Petrák
Erik Šťastný:12.7.2018 12:00

Hledej zkrátka chybu ve svojí logice, A je mimo hodnoty, B je mimo hodnoty nebo daný prvek nemá value "test1" Jedna z těch podmínek je prostě false.

Tenhle kód normálně funguje:

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<body>

<button id="test" value="test1"></<button>
<script>
a = 7
b = 17
if(a > 5 && a < 10 && b > 15 && b < 20 && document.getElementById("test").value == "test1"){
    console.log("Funguje")
}
</script>

</body>
</html>
Editováno 12.7.2018 12:01
 
Nahoru Odpovědět
12.7.2018 12:00
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovídá na Josef Petrák
Peter Sciranka:12.7.2018 12:05

Ahoj, ono záleží, že čo je element "test". Podľa mňa bude v tomto problém:

document.getElementById("test").value == "test"

Najlepšie ak pošleš HTML.

Nahoru Odpovědět
12.7.2018 12:05
Act as if it was Impossible to Fail
Avatar
Odpovídá na Peter Sciranka
Josef Petrák:12.7.2018 12:26

No, když odstraním

document.getElementById("test").value == "test1"

a nechám jenom

else if(a > 5 && a < 10 && b > 15 && b < 20)

, tak mi to stejně nefunguje. Když tam nechám jenom

else if(a > 5 && a < 10)

, tak to jde. Tak nevím.

 
Nahoru Odpovědět
12.7.2018 12:26
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovídá na Josef Petrák
Peter Sciranka:12.7.2018 13:03

Najlepšie by bolo ak by si tu hodil celý kód JS aj HTML.
Z toho čo si napísal tak je problém asi s tým "b", ale kto vie, bez kódu sa to ťažko posudzuje.

Nahoru Odpovědět
12.7.2018 13:03
Act as if it was Impossible to Fail
Avatar
Odpovídá na Ota Vlna
Josef Petrák:12.7.2018 13:05

Když dám

if(a > 5 && a < 10 && b > 15 && b < 20 && document.getElementById("test").value == "test1")

tak to nefunguje, ale když dám

if(a > 5 && b > 15 && document.getElementById("test").value == "test1")

tak už to jde. Ono, když dám rozmezí stejné proměnné "a"

a>5 && a<10

tak to nejde.

 
Nahoru Odpovědět
12.7.2018 13:05
Avatar
Odpovídá na Josef Petrák
Neaktivní uživatel:12.7.2018 13:22

No počkej, to se ti jaksi mění, ne?
Poprvé:

else if(a > 5 && a < 10)

, tak to jde. Tak nevím.

Podruhé:

a>5 && a<10

tak to nejde.

Nahoru Odpovědět
12.7.2018 13:22
Neaktivní uživatelský účet
Avatar
Odpovídá na Peter Sciranka
Josef Petrák:12.7.2018 17:12

Tady posílám příklad dvou kódů, ze kterých ten první funguje (není tam rozmezí, ale hodnota 0 a výše), ale ten druhý nefunguje (protože je v něm dané rozmezí 0 až 100). Moc díky za radu v čem je problém.

1. kód (funkční)

<html>
<body>
<b>Zadejte 1. číslo</b><input type="number" id="a">
<b>Zadejte 2. číslo</b><input type="number" id="b">
<select id="operace">
<option value="plus">sčítání</option>
<option value="minus">odečítání</option>
</select>
<input type ="button" onclick="vypocet()" value="Vypočítej">
<h2 id="vysledek"></h2>
</body>
</html>
<script type"text/javascript">
function vypocet(){
var a=parseFloat(document.getElementById("a").value);
var b=parseFloat(document.getElementById("b").value);
var scitani=a+b;
var odecitani=a-b;
if (a > 0 && b > 0 && document.getElementById("operace").value == "plus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+scitani;
}
else if(a > 0 && b > 0 && document.getElementById("operace").value == "minus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+odecitani;
}
}
</script>

2. kód (nefunkční)

<html>
<body>
<b>Zadejte 1. číslo</b><input type="number" id="a">
<b>Zadejte 2. číslo</b><input type="number" id="b">
<select id="operace">
<option value="plus">sčítání</option>
<option value="minus">odečítání</option>
</select>
<input type ="button" onclick="vypocet()" value="Vypočítej">
<h2 id="vysledek"></h2>
</body>
</html>
<script type"text/javascript">
function vypocet(){
var a=parseFloat(document.getElementById("a").value);
var b=parseFloat(document.getElementById("b").value);
var scitani=a+b;
var odecitani=a-b;
if (a > 0 && a < 100 && b > 0 && b < 100 && document.getElementById("operace").value == "plus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+scitani;
}
else if(a > 0 && a < 100 && b > 0 && b < 100 && document.getElementById("operace").value == "minus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+odecitani;
}
}
</script>
 
Nahoru Odpovědět
12.7.2018 17:12
Avatar
Odpovídá na Josef Petrák
Erik Šťastný:12.7.2018 17:16

Tak pardon, ale musím říct opravdu jen WTF

Jaký problém? Funguje to přesně jak říkáte druhý funguje jen ve svém rozmezí.

 
Nahoru Odpovědět
12.7.2018 17:16
Avatar
Odpovídá na Erik Šťastný
Josef Petrák:12.7.2018 21:12

Nevím, jak je to možné, ale mě to druhé nefunguje.

 
Nahoru Odpovědět
12.7.2018 21:12
Avatar
Odpovídá na Josef Petrák
Matúš Olejník:12.7.2018 21:33

Skús napísať presne ako to testuješ :) Tvoj vstup, aktuálny výstup a očakávaný výstup pre oba prípady.

Nahoru Odpovědět
12.7.2018 21:33
/* I am not sure why this works but it fixes the problem */
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.7.2018 7:38

Jj, presne, napis, postup. Kdyz vyplnis do ... melo by se stat presne ...

Je mozne pouzit alert a vypsat si vysledky podminek (a to by nas zajimalo, treba). Napis si treba na kousek papirku, jake ocekavas vysledky.

alert([
a, b, a > 0, a < 100, b > 0, b < 100, document.getElementById("operace").value == "plus"
])
a > 0 && a < 100 && b > 0 && b < 100
0 < a && a < 100 && 0 < b && b < 100 // bych napsal takto, pro lepsi orientaci

document.getE­lementById("o­perace").value
Tohle by ve starem prohlizeci (nebo nekterem) nemuselo fungovat. Tam se musi k selectu pristupovat pres selectedIndex.

sel.options[sel.selectedIndex].value==neco // http://help.dottoro.com/ljsthorn.php

Jo, mimochodem, a kdyz pracujes s formularovymi tagy, je dobre uzavrit to do tagu form. S tim maji taky obcas prohlizece problem.

Editováno 13.7.2018 7:40
 
Nahoru Odpovědět
13.7.2018 7:38
Avatar
Odpovídá na Peter Mlich
Josef Petrák:13.7.2018 11:35

Když si zobrazím funkční kód 1. v prohlížeči, do prvního políčka vložím například číslo 5 (musí být číslo větší než 0), do druhého políčka číslo 3 (musí být číslo větší než 0), dále zvolím v roletce sčítání nebo odečítání, kliknu na tlačítko vypočítej, tak pod ním se zobrazí výsledek 8 nebo 2.

Když to podobně udělám u druhého nefunkčního kódu, čili do prvního políčka vložím číslo 5 (musí být číslo větší než 0 a větší než 100), do druhého například číslo 3 (musí být číslo větší než 0 a větší než 100), tak po výběru sčítání nebo odečítání a stisknutí tlačítka vypočítej to neprovede vůbec nic.

Funkční 1. kód

<html>
<body>
<b>Zadejte 1. číslo</b><input type="number" id="a">
<b>Zadejte 2. číslo</b><input type="number" id="b">
<select id="operace">
<option value="plus">sčítání</option>
<option value="minus">odečítání</option>
</select>
<input type ="button" onclick="vypocet()" value="Vypočítej">
<h2 id="vysledek"></h2>
</body>
</html>
<script type"text/javascript">
function vypocet(){
var a=parseFloat(document.getElementById("a").value);
var b=parseFloat(document.getElementById("b").value);
var scitani=a+b;
var odecitani=a-b;
if (a > 0 && b > 0 && document.getElementById("operace").value == "plus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+scitani;
}
else if(a > 0 && b > 0 && document.getElementById("operace").value == "minus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+odecitani;
}
}
</script>

Nefunkční 2. kód (liší se od prvního kódu pouze tím, že číslo nemá být jen větší než 0, ale musí být zároveň menší než 100)

<html>
<body>
<b>Zadejte 1. číslo</b><input type="number" id="a">
<b>Zadejte 2. číslo</b><input type="number" id="b">
<select id="operace">
<option value="plus">sčítání</option>
<option value="minus">odečítání</option>
</select>
<input type ="button" onclick="vypocet()" value="Vypočítej">
<h2 id="vysledek"></h2>
</body>
</html>
<script type"text/javascript">
function vypocet(){
var a=parseFloat(document.getElementById("a").value);
var b=parseFloat(document.getElementById("b").value);
var scitani=a+b;
var odecitani=a-b;
if (a > 0 && a < 100 && b > 0 && b < 100 && document.getElementById("operace").value == "plus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+scitani;
}
else if(a > 0 && a < 100 && b > 0 && b < 100 && document.getElementById("operace").value == "minus"){
document.getElementById("vysledek").innerHTML = "Výsledek je: "+odecitani;
}
}
</script>
 
Nahoru Odpovědět
13.7.2018 11:35
Avatar

Člen
Avatar
Odpovídá na Josef Petrák
:13.7.2018 11:49

Skopírovať som ten druhý, "nefunkčný" príklad, vložil som ho na jsbin.com tak ako je, bez úpravy čo len jediného znaku, a funguje. Chybu robíš ty, a to asi nejakú logickú, nie syntaktickú. Preto fakt neviem ako ti pomôcť.

 
Nahoru Odpovědět
13.7.2018 11:49
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.7.2018 11:51

'nemá být jen větší než 0'

  • si odporuje s podminkou a > 0, b > 0
  • pokud je kod ok a text spatne, tak mi ten kod funguje spravne.

5, 3, vypocitej = +8
5, 3, odecitani, vypocitej = +2
Jaky pouzivas prohlizec (nedej boze, aby to byl zmetek chrome nebo opera) a co vypise ten alert?

alert([
a, b, a > 0, a < 100, b > 0, b < 100, document.getElementById("operace").value == "plus"
])

U mne
5,3,true,true,tru­e,true,true - scitani
5,3,true,true,tru­e,true,false - odcitani

 
Nahoru Odpovědět
13.7.2018 11:51
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:13.7.2018 11:58

Nemáte pocit, že si tady z přítomných někdy tazatele dělají legraci?

Nahoru Odpovědět
13.7.2018 11:58
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Josef Petrák:13.7.2018 12:13

Ne, z nikoho si tady srandu nedělám, ve Wordpressu mi to nefunguje. Nejsem v tomto směru odborník, takže jsem netušil, že je chyba právě tady. Děkuji všem za odpovědi, ze kterých vím, že kód je v pořádku.

 
Nahoru Odpovědět
13.7.2018 12:13
Avatar

Člen
Avatar
Odpovídá na Josef Petrák
:13.7.2018 21:59

Máte tu aj vkladanie animovaných gifov? Lebo to je fakt na facepalm, že OP až na konci povie, že ono to nejde vo WP, a nie, že v prehliadači...

 
Nahoru Odpovědět
13.7.2018 21:59
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Josef Petrák
Peter Mlich:20.7.2018 7:44

Tak co? Prisel jsi na neco s tim WP? Www prohlizece maji js / web konzolu, ktera zobrazuje js chybove hlasky. Pokud to nefunguje, tak to tam pise nejakou chybu.
Firefox - prave tl mysi v zahlavi okna - zobrazit Hlavni nabidka
Firefox - Nastroje - Vyvoj webu - Webova konzola

Nejcastejsi chyby jsou, ze je

  • id duplicitne <b id=x></b> <b id=x></b>
  • funkci mas duplicitne function c() {} function c() {}
  • prepises si onload, window.onload=xyz; window.onload=xyz;, $(){}
  • prepises si submit formulare <form><input name=submit> a jak chces volat potom document.form[0]­.submit() ?

...

Spoustu z nich se spatne hleda. Ale v konzoli obcas pinda hlasku, ze neco nelze spustit nebo ma spatne parametry. Pak se da hledat konkretni text ve vsech souborech, ktere do programu pripojujes a zjitis treba, ze ve dnvou externich souborech mas tutez funkci, kazda ma jine parametry, treba. Ale obvykle vis, v jakem souboru hledat.

 
Nahoru Odpovědět
20.7.2018 7:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.