Diskuze: Nefunkční podmínka v Javascript

JavaScript JavaScript Nefunkční podmínka v Javascript

Aktivity (1)
Avatar
Josef Petrák:12. července 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. července 11:04
Avatar
Jan Osuský
Člen
Avatar
Jan Osuský:12. července 11:46

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

 
Nahoru Odpovědět 12. července 11:46
Avatar
Ota Vlna
Redaktor
Avatar
Odpovídá na Josef Petrák
Ota Vlna:12. července 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. července 11:49
Avatar
Odpovídá na Jan Osuský
Josef Petrák:12. července 11:52

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

 
Nahoru Odpovědět 12. července 11:52
Avatar
Ota Vlna
Redaktor
Avatar
Odpovídá na Josef Petrák
Ota Vlna:12. července 11:56

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

 
Nahoru Odpovědět 12. července 11:56
Avatar
Odpovídá na Josef Petrák
Erik Šťastný:12. července 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. července 12:01
 
Nahoru Odpovědět  +1 12. července 12:00
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na Josef Petrák
Peter Sciranka:12. července 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. července 12:05
Act as if it was Impossible to Fail
Avatar
Odpovídá na Peter Sciranka
Josef Petrák:12. července 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. července 12:26
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na Josef Petrák
Peter Sciranka:12. července 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. července 13:03
Act as if it was Impossible to Fail
Avatar
Odpovídá na Ota Vlna
Josef Petrák:12. července 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. července 13:05
Avatar
Odpovídá na Josef Petrák
Andy Scheuchzer:12. července 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. července 13:22
Od ASM úroveň jazyků pouze klesá…
Avatar
Odpovídá na Peter Sciranka
Josef Petrák:12. července 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. července 17:12
Avatar
Odpovídá na Josef Petrák
Erik Šťastný:12. července 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. července 17:16
Avatar
Odpovídá na Erik Šťastný
Josef Petrák:12. července 21:12

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

 
Nahoru Odpovědět 12. července 21:12
Avatar
Odpovídá na Josef Petrák
Matúš Olejník:12. července 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  +1 12. července 21:33
/* I am not sure why this works but it fixes the problem */
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13. července 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. července 7:40
 
Nahoru Odpovědět 13. července 7:38
Avatar
Odpovídá na Peter Mlich
Josef Petrák:13. července 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. července 11:35
Avatar
Odpovídá na Josef Petrák
Vladislav Ladicky:13. července 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. července 11:49
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13. července 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. července 11:51
Avatar
David Hynek
Redaktor
Avatar
David Hynek:13. července 11:58

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

Nahoru Odpovědět  +1 13. července 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. července 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. července 12:13
Avatar
Odpovídá na Josef Petrák
Vladislav Ladicky:13. července 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  +2 13. července 21:59
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Josef Petrák
Peter Mlich:20. července 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
  • 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. července 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.