Diskuze: Nefunkční podmínka v Javascript
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 23 zpráv z 23.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Myslím, že ti přebývá jedna závorka úplně v pravo.
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)
Odstranil jsem závorku úplně vpravo a stejně to nejde, tak nevím.
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>
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.
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.
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.
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.
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.
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>
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í.
Nevím, jak je to možné, ale mě to druhé nefunguje.
Skús napísať presne ako to testuješ Tvoj vstup, aktuálny výstup a
očakávaný výstup pre oba prípady.
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.getElementById("operace").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.
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>
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ť.
'nemá být jen větší než 0'
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,true,true,true - scitani
5,3,true,true,true,true,false - odcitani
Nemáte pocit, že si tady z přítomných někdy tazatele dělají legraci?
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.
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...
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
...
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.
Zobrazeno 23 zpráv z 23.