Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: Nefunguje If

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jiří Veselý:4.5.2018 15:14

Zdravím, už od rána nemohu přijít na to, proč mi to nechce zobrazovat,když tam dám dvě podmínky. Já to beru z několik selectů a když použiji pouze jeden,takt o funguje,ale když zadám, aby se to rovnalo více jak jedné,tak to nefunguje vůbec.

function vypln(sady,sper­ky,broze,druh){
hodnota = sady.options[sa­dy.selectedIn­dex].value;

if(hodnota==="13" && hodnota==="22"){ document.write("<img src='../Documen­ts/wwwfoto/sper­ky/abc1.JPG' alt='abc1.JPG'>");}
if(hodnota==="42"){ document.write("<img src='../Documen­ts/wwwfoto/sper­ky/abc4.JPG' alt='abc4.JPG'>");}
}

 
Odpovědět
4.5.2018 15:14
Avatar
Odpovídá na Jiří Veselý
Erik Šťastný:4.5.2018 15:23

Ahoj,

nechceš náhodou použít || (nebo) na místo && (a zároveň) ?

Nemyslím si, že se nějaká "hodnota" bude rovnat "13" a zároveň "22" :)

Editováno 4.5.2018 15:23
 
Nahoru Odpovědět
4.5.2018 15:23
Avatar
Jiří Veselý:4.5.2018 15:26

No já potřebuji, aby se rovnalo obojím, jelikož mám select - option a ty mam podle id a vždycky tam si někdo vybere z každého selectu nějaký option a pak se mu zobrazí obrázek.

 
Nahoru Odpovědět
4.5.2018 15:26
Avatar
Odpovídá na Jiří Veselý
Erik Šťastný:4.5.2018 15:40

A jak se má jeden string ve stejném čase rovnat dvěma různým hodnotám? :-O

 
Nahoru Odpovědět
4.5.2018 15:40
Avatar
Odpovídá na Jiří Veselý
Matúš Olejník:4.5.2018 15:42

Daj na radu Erika :D vyskúšal si to vôbec tak?

Nahoru Odpovědět
4.5.2018 15:42
/* I am not sure why this works but it fixes the problem */
Avatar
Jiří Veselý:4.5.2018 15:50

No to právě nevím .. :D
A lze to nějak udělat tak, aby byl výsledek takový, jaký jsem psal výše ?

Editováno 4.5.2018 15:51
 
Nahoru Odpovědět
4.5.2018 15:50
Avatar
Odpovídá na Jiří Veselý
Matúš Olejník:4.5.2018 15:57

Veď keď z comboboxu vyberieš nejakú hodnotu tak bude buď 13 ALEBO 22 nie? :) Či máš taký combobox kde môžeš vybrať viaceré hodnoty naraz?

Editováno 4.5.2018 15:59
Nahoru Odpovědět
4.5.2018 15:57
/* I am not sure why this works but it fixes the problem */
Avatar
Roman Havránek:6.5.2018 23:20

Pokud máš box, který ze kterého se vybírá pouze jedna hodnota, pak výstupní hodnota se nemůže rovnat dvou rozdílným hodnotám v jeden čas.

Pokud máš box, ze kterého vybíráš více hodnot, pak se nasypou do pole, kde jej musíš vybírat z jednotlivých indexů a dále se ptát, ale nevím k čemu bych to použil :(

Editováno 6.5.2018 23:21
Nahoru Odpovědět
6.5.2018 23:20
sleep();
Avatar
katrincsak
Člen
Avatar
Odpovídá na Jiří Veselý
katrincsak:7.5.2018 11:17

To je přeci nelogické. . . Na víc to píšeš do špatné sekce.

Uvádíš to tak jako kdyby jsi měl modré tričko a tvrdil jsi, že je zároveň i žluté. A to i přes to, že je evidentně modré. Nebo buď mám sklenici vody plnou, nebo prázdnou a nemůže být obojí zároveň současně.

Ale zda potřebuješ, aby se podmínka splnila v obou případech, tak já bych udělal toto:

if(hodnota==="13" ||  hodnota==="22"){
        document.write("<img src='../Documents/wwwfoto/sperky/abc1.JPG' alt='abc1.JPG'>");
}else if(hodnota === "42"){
        document.write("<img src='../Documents/wwwfoto/sperky/abc4.JPG' alt='abc4.JPG'>");
}

V opačném případě tvá úvaha je úplně špatně a budeš muset popsat co se snažíš celkově udělat, třeba již pak bude lehčí tě navést.
 
Nahoru Odpovědět
7.5.2018 11:17
Avatar
katrincsak
Člen
Avatar
Odpovídá na Jiří Veselý
katrincsak:7.5.2018 11:20

Pak mě ještě max napadá, že potřebuješ, aby v hodnotě bylo více hodnot, pak bude nutné vytvořit pole, nebo objekt do kterého si budeš hodnoty ukládat.

 
Nahoru Odpovědět
7.5.2018 11:20
Avatar
gorri
Člen
Avatar
Odpovídá na katrincsak
gorri:7.5.2018 12:30

Když se na to podívám, tak mě napadá, co zkusit toto

if((hodnota==="13") &&  (hodnota==="22"))

a ty === tam máš proč 3x?
Pokud to má mít stejnou hodnotu, tak tam stačí 2.

Editováno 7.5.2018 12:31
Nahoru Odpovědět
7.5.2018 12:30
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
katrincsak
Člen
Avatar
Odpovídá na gorri
katrincsak:7.5.2018 12:49

Však je to hloupost, jak můžeš mít v jedné proměnné 2 hodnoty současně? To nejde, buď je tam 13 a nebo 22, ale rozhodně ne obojí. 3x rovnítko se porovnává i stejný datový typ, tohle může mít teoreticky správně. Záleží zda v proměnné "hodnota" je string a potřebuje to tímto způsobem kontrolovat.

 
Nahoru Odpovědět
7.5.2018 12:49
Avatar
gorri
Člen
Avatar
Odpovídá na katrincsak
gorri:7.5.2018 12:54

Jo i to by mohla být blbost. Ale zase na druhou stranu vidíme jen to co vidíme. Nicméně reaguji mu na to, že mu nefunguje IF. A to by mohlo být tímto :-D
Každý dotaz by měl být zvlášť ale klidně zahrnutý do jedné podmínky. Od toho je tam && aby vědělo co a dál ;-)

Nahoru Odpovědět
7.5.2018 12:54
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
katrincsak
Člen
Avatar
Odpovídá na gorri
katrincsak:7.5.2018 13:07

Ano, vidíme to, že jste úplně mimo oba dva :/ Tohle je tak triviální, že se to nedá ani jinak vysvětlit a to buď člověk chápe a nebo nechápe.

 
Nahoru Odpovědět
7.5.2018 13:07
Avatar
Petr Langer
Člen
Avatar
Odpovídá na gorri
Petr Langer:7.5.2018 13:50

IF mu funguje zcela správně. To že tam má podmínku, která nemůže nikdy nastat je věc druhá. Pokud to dobře chápu, potřebuje z formuláře dostat dvě proměnné, ID kategorie a ID podkategorie a pak mu to bude fungovat.

 
Nahoru Odpovědět
7.5.2018 13:50
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:7.5.2018 17:39

Z kvantového hlediska to sice možná možné je („Schrödingerův string”), ale v programování má proměnná vyhrazené místo v paměti a to místo může mít jen jednu hodnotu.

Editováno 7.5.2018 17:40
 
Nahoru Odpovědět
7.5.2018 17:39
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:7.5.2018 17:56

Pošli sem celý kód, takhle vůbec není poznat, čeho vlastně chceš dosáhnout.

 
Nahoru Odpovědět
7.5.2018 17:56
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Šimon Rataj
Peter Mlich:9.5.2018 7:50

Videl jsem kod v js, kdy promenna muze nabyvat vice hodnot. Tusim se pres prototype prepisovala vlastnost objektu read. Nevim uz, ale, kde to bylo.

 
Nahoru Odpovědět
9.5.2018 7:50
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.5.2018 13:03

Ha, podarilo se mi dokonce najit navod, jak to udelat, aby promenna menila hodnotu.
Obecne to jde. Samozrejme to povazuji za nevyuzitelne. Mozna tak pri propojovani objektu.

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
<script>
var o,x;
o = {};
x = 1;
Object.defineProperty(o, 'y', {
  get() { x++; return x; },
});

alert([o.y, o.y, o.y==4, o.y==5, o.y==6 && o.y==7]) // vypise 2, 3, true, true, true
</script>
 
Nahoru Odpovědět
9.5.2018 13:03
Avatar
dez1nd
Člen
Avatar
dez1nd:10.5.2018 7:48

Já to chápu takto
Já to beru z několik selectů
nejspíš to chtěl takto:

hodnota = sady.options[sady.selectedIndex].value;
hodnota2 = sady2.options[sady2.selectedIndex].value;

if(hodnota==="13" && hodnota2==="22"){ document.write("<img src='../Documents/wwwfoto/sperky/abc1.JPG' alt='abc1.JPG'>");}
if(hodnota==="42"){ document.write("<img src='../Documents/wwwfoto/sperky/abc4.JPG' alt='abc4.JPG'>");}
}

píše že to vybírá z několika selectboxů ale hodnotu bere jen z jednoho.

 
Nahoru Odpovědět
10.5.2018 7:48
Avatar
dez1nd
Člen
Avatar
Odpovídá na dez1nd
dez1nd:10.5.2018 7:53

Předchozí příspěvek ignorujte!
Píšeš, že tam máš víc selectboxů, hodnoty ale vybíráš jen z jednoho.

hodnota = sady.options[sady.selectedIndex].value;

jestli jich tam máš víc, podle kterých vybíráš obrázek, musíš tam mít i ten druhej selectbox

// nějaká tvoje sada šperků
hodnota = sady.options[sady.selectedIndex].value;
// tohle je ten drtuhý selectbox
hodnota2 = sady2.options[sady2.selectedIndex].value;

potom ti ten if bude fungovat s upravou

if(hodnota==="13" && hodnota2==="22")
{}

PS: dej si pozor na to porovnávání datového typu. Jestli se ti v hodnotě nebo v hodnotě2 objeví int místo stringu tak ti to fungovat nebude.

Editováno 10.5.2018 7:55
 
Nahoru Odpovědět
10.5.2018 7:53
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 21 zpráv z 21.