Autor Zpráva
Karlos
Profil *
Mam ve formulari x poli a potrebuju udelat fci ktera zjisti pri odeslani zda se nekde nevyskytuji stejne hodnoty.
Jde to udelat nejak jednoduseji nez>

if pole1 == pole2 {}
else if pole1 == pole3 {}
...
else if pole1 == polex-1 {}
else if pole1 == polex {}

else if pole2 == pole3 {}
else if pole2 == pole4 {}
...
else if pole2 == polex-1 {}
else if pole2 == polex {}

....

else if polex-2 == pole-1 {}
else if polex-2 == polex {}

else if polex-1 == polex {}
endif

tyn. vypsat vsechny kombinace.
Predpokladam ze to bude nejaka variace na for ale netusim jak.

JSku moc nerozumim tak mi pripadne vypiste tu fci celou

Predem dik.
llook
Profil
Aha, porovnat každé pole s každým.
Udělal bych to dvěmi fory. Záleží na tom, jak to máš v tom HTML. Předpokládejme, že tam máš tohle:
<input type="text" name="nazev" id="ti1" />
<input type="text" name="dalsi-nazev" id="ti2" />
<input type="text" name="a-dalsi" id="ti3" />
A tak dále...
Pak bych to zkontroloval takhle:

pocet_poli = 3;
for (i=0; i<pocet_poli; i++) {
for (j=0; j<pocet_poli; j++) {
if (i == j) {
continue; // nebudem porovnávat pole samo se sebou.
}
if (document.getElementById('ti'+i).value == document.getElementById('ti'+j).value) {
/* SHODUJÍ SE */
}
}
}

Vypadá to obludně, ale je to vpodstatě jednoduchý.
Honza Hučín
Profil
Asi bych to malinko poopravil. Cykly by měly běžet od 1, ne od nuly, protože elementy jsou číslované od 1.

V prvním for cyklu bych psal
for (i=1;i<pocet_poli;i++)

a v druhém for cyklu je možné psát
for (j=i+1; j<=pocet_poli; j++)

Ušetří se pár iterací a lze vypustit podmínku if (i==j).
habendorf
Profil
llook: hezký řešení, ale napadá mě vylepšení: pokud dobře chápu, vše se porovnává dvakrát - např 1 s 3 a pak časem 3 s 1.
To je trochu zbytečné. co kdyby ten druhý cyklus začínal
for (j=i+1;...), pak by odpadla i ta podmínka if (i == j) a vzájemné kombinace by se porovnávaly jen jednou. Ale možná kecám, nemám čas to domýšlet...
habendorf
Profil
Tak asi musím příště psát rychleji :o)
Ale jsem rád, že jsme se shodli.
Fred
Profil
Mám taky možná hloupý dotaz, moc mi ty pole nejdou. když to teda celý shrnu a jestli jsem to pochopil správně celé to vypadá takhle
<script type="text/javascript">
<!--
function kontrola(){
pocet_poli = 3;
for(i=1;i<pocet_poli;i++){
for(j=i+1;j<=pocet_poli;j++){
if(document.getElementById('ti'+i).value==''||document.getElementById( 'ti'+j).value==''){
alert('nezadáno')
}
else if(document.getElementById('ti'+i).value==document.getElementById('ti' +j).value){
alert('shodují se')
}
else alert('neshodují se')
}}}
//-->
</script>

<form onsubmit="kontrola()">
<input type="text" name="nazev" id="ti1" />
<input type="text" name="dalsi-nazev" id="ti2" />
<input type="text" name="a-dalsi" id="ti3" />
<input type="submit" value="submit" />
</form>

Jak teď docílím toho, aby ty alerty vyskočili jen jednou??
habendorf
Profil
Místo neustálého alertování měň nějakou proměnou - např. deklaruj shoda = true, pokud se shodují, neděje se nic, pokud se neshodují, tak shoda=false. A na konci if shoda alert "shodují se" else alert "neshodují se" (píšu zjednodušeně, myšlenka je snad jasná)
Fred
Profil
Díky
habendorf
Profil
Fred Promiň, celé je to přesně obráceně. Pokud nerozumíš, ozvi se.
Fred
Profil
Budu to zkoušet, to je tak když se něco učím odprostředka, pak mi bohužel občas chybí základy
Fred
Profil
jestli jsem to pochopil správně, tak jsem pokročil sem, jen nevím jak ošetřit, aby se ty inputy nesmazaly, když nejsou v pořádku??

function kontrola(){
pocet_poli = 3;
var shoda;
for(i=1;i<pocet_poli;i++){
for(j=i+1;j<=pocet_poli;j++){
if(document.getElementById('ti'+i).value==''||document.getElementById( 'ti'+j).value==''){
shoda=true;
}
else if(document.getElementById('ti'+i).value==document.getElementById('ti' +j).value){
shoda=true;
}
else shoda=false;
if(shoda==false){
alert('v pořádku')
return true;
}}}}
habendorf
Profil
Možná by šly ty inputy uložit do nějakých proměných a pak je znovu doplnit do formuláře. Pokud by těch inputů bylo víc, asi bych využil pole (array).
A nezlob se na mě, ale ten script je dost nesmyslnej. Třeba tohle if(document.getElementById('ti'+i).value==''||document.getElementById( 'ti'+j).value=='') je kravina. A zavedl bych dvě proměnné - jednu pro výsledek testování "prázdnosti" a druhou pro výsledek testování shody.
Napsal bych ti to, ale padá mi hlava, mám spánkovej dluh (takže možná píšu kraviny) :o)
Fred
Profil
...||... - Je kravina, no jo taky jsem si říkal, že je to to samý. Dík za postrčení na správnou cestu
Toto téma je uzamčeno. Odpověď nelze zaslat.