Podmínka v JavaScriptu

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Podmínka v JavaScriptu

Příspěvek od arxeiss »

Psal jsem kontrolu formuláře přes JS, kde jedna funkce mohla být zavolána z dvou skoro totožných formulářů. A napsal jsem si tam podmínku

Kód: Vybrat vše

if((nick.value=='' || pass.value=='' || passr.value=='' || jmeno.value=='' || email.value=='') && formular=='registrace'){
  alert("Vyplně prosím všechna pole označená hvězdičkou!");
  nick.focus();
  return false;
}
Pokud jsem si tu fci vyvolal z formuláře jménem registrace bylo vše OK. Jak jsem ale vyvolal tu fci z toho druhého formuláře jménem zmena tak to už nejelo dokud jsem ten výraz formular=='registrace' nedal nazačátek. Pokud bylo na konci tak jakoby ten script zkončil i když pod tou podmínkou byly další příkazy které nebyly v žádné podmínce, které by se provedly vždy.

Nechápu důvod proč prostě tam musí být ten výraz na začátku
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Lemra
Čestný člen
Čestný člen
Uživatelský avatar
Registrován: 03. zář 2003

Re: Podmínka v JavaScriptu

Příspěvek od Lemra »

Ta podmínka je OK, ale proměnné (nick, pass...) někde v těle té funkce musíš definovat - cca

function kontrola()

{
nick=document.forms["jméno_prvního_formuláře"].elements["nick"];
...;
}

... čili dodefinovat v rámci stejné funkce druhý form (místo jména by mohl teoreticky stačit index od 0) a neměl by být problém. IE umí rozšíření pole all, ale protože to nativně umí právě jen IE, určitě tuhle konstrukci nedoporučuji.
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: Podmínka v JavaScriptu

Příspěvek od arxeiss »

Ty proměnné mám definované. Jediný problém se skrýval v tom že to co bylo v logickém součinu. V mém případě
if((nick.value=='' || pass.value=='' || passr.value=='' || jmeno.value=='' || email.value=='') && formular=='registrace')
musí být na začátku. Prostě teď to nepojede. Když dám to formular=='registrace' na začátek. takže bude
if(formular=='registrace' && ((nick.value=='' || pass.value=='' || passr.value=='' || jmeno.value=='' || email.value=='')
Teď to pojede. Vím že and má přeednost před OR apod... ale to by nemělo znamenat že musí být na začátku ne?
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Zivan
Začátečník
Začátečník
Registrován: 30. čer 2005
Bydliště: Brno
Kontaktovat uživatele:

Re: Podmínka v JavaScriptu

Příspěvek od Zivan »

Co to znamena "z druheho formulare to nejelo"? Podle tebe mel vyskocit ten alert nebo ne? Mozna by to chtelo o kus delsi cast kodu a presne popsat, co to dela a co by podle tebe melo.

Myslim, ze v JS se IF standardne vyhodnocuje zkracene, takze po tom otoceni se vyhodnoti promenna formular a pokud v ni neni "registrace", tak se uz dal nezjistuje, jestli jsou ty dalsi hodnoty prazdne nebo ne.

// Ondraster - nevyhrabuj pls, diky

Edit: Sorry, nevsimnul jsem si data :)
Naposledy upravil(a) Zivan dne úte 12. led 2010, 20:19, celkem upraveno 1 x.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: Podmínka v JavaScriptu

Příspěvek od arxeiss »

Tak když už jsi to vyhrábl...
Tak už jsem to vyřešil, ta deklarace jedné proměnné byla na špatném místě :oops: a pak to spadlo protože to kontrolovalo nedeklarovanou proměnnou.
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Odpovědět

Zpět na „Programování a web“