Autor Zpráva
MilanJ
Profil
Na www.tourism-review.com/test/aaa.php mám formulář.
Validaci provádím nejprve JavaScriptem, který je uložen v tomto souboru.
Pokud validací projde, zkontroluji před uložením do db vyplnění polí v PHP.

Problém: validace JS projde jen v IE, FireFox ji ignoruje a já nevím proč.
MilanJ
Profil
Zřejmě bude nějaká chybka v JavaScriptu
MilanJ
Profil
Zkusím vložit JS kód, třeba někdo pozná chybu na první pohled...


function validate(formular_workshops_std)
{
// smazání všech chybových hlášení, resp. zrušení červeného pozadí chybně vyplněných prvků
document.getElementById('provider_email').style.backgroundColor = '';
document.getElementById('warn2_provider_email').style.display = 'none';
document.getElementById('provider_name').style.backgroundColor = '';
document.getElementById('start').style.backgroundColor = '';
document.getElementById('duration').style.backgroundColor = '';
document.getElementById('mode_of_study').style.backgroundColor = '';
document.getElementById('programme_language').style.backgroundColor = '';
document.getElementById('city').style.backgroundColor = '';
document.getElementById('country').style.backgroundColor = '';
document.getElementById('ad_region').style.backgroundColor = '';
document.getElementById('other_input').style.backgroundColor = '';
document.getElementById('programme_type').style.backgroundColor = '';
document.getElementById('travel_segments').style.backgroundColor = '';
document.getElementById('programme_name').style.backgroundColor = '';


var x; /* počítadlo chyb */
x=0; /* pokud zůstane x bez chyby, není ve formuláři chyba */

// pokud není pole formuláře vyplněno, pozadí se změní barvu
if (formular_workshops_std.provider_email.value=="")
{
document.getElementById('provider_email').style.backgroundColor = '#FF0000';
formular_workshops_std.provider_email.focus();
x=1;
}
else if (window.RegExp)
{
re = new RegExp("^[^@]+@[^.]+\..+$");
if (!re.test(formular_workshops_std.provider_email.value))
{
document.getElementById('provider_email').style.backgroundColor = '#FF0000';
document.getElementById('warn2_provider_email').style.display = '';
formular_workshops_std.provider_email.focus();
x=1;
}
}

if (formular_workshops_std.provider_name.value=="")
{
document.getElementById('provider_name').style.backgroundColor = '#FF0000';
formular_workshops_std.provider_name.focus();
x=1;
}
if (formular_workshops_std.start.value=="")
{
document.getElementById('start').style.backgroundColor = '#FF0000';
formular_workshops_std.start.focus();
x=1;
}
if (formular_workshops_std.duration.value=="")
{
document.getElementById('duration').style.backgroundColor = '#FF0000';
formular_workshops_std.duration.focus();
x=1;
}
if (formular_workshops_std.mode_of_study.value=="")
{
document.getElementById('mode_of_study').style.backgroundColor = '#FF0000';
formular_workshops_std.mode_of_study.focus();
x=1;
}
if (formular_workshops_std.programme_language.value=="")
{
document.getElementById('programme_language').style.backgroundColor = '#FF0000';
formular_workshops_std.programme_language.focus();
x=1;
}
if (formular_workshops_std.city.value=="")
{
document.getElementById('city').style.backgroundColor = '#FF0000';
formular_workshops_std.city.focus();
x=1;
}
if (formular_workshops_std.ad_region.value=="")
{
document.getElementById('ad_region').style.backgroundColor = '#FF0000';
formular_workshops_std.ad_region.focus();
x=1;
}
if (formular_workshops_std.country.value=="0")
{
document.getElementById('country').style.backgroundColor = '#FF0000';
formular_workshops_std.country.focus();
x=1;
}
if (document.getElementById('otherregion').style.display == 'inline' && formular_workshops_std.other_input.value=="")
{
document.getElementById('other_input').style.backgroundColor = '#FF0000';
formular_workshops_std.other_input.focus();
x=1;
}
if (formular_workshops_std.programme_type.value=="")
{
document.getElementById('programme_type').style.backgroundColor = '#FF0000';
formular_workshops_std.programme_type.focus();
x=1;
}
if (formular_workshops_std.travel_segments.value=="")
{
document.getElementById('travel_segments').style.backgroundColor = '#FF0000';
formular_workshops_std.travel_segments.focus();
x=1;
}
if (formular_workshops_std.programme_name.value=="")
{
document.getElementById('programme_name').style.backgroundColor = '#FF0000';
formular_workshops_std.programme_name.focus();
x=1;
}
if (x==1) /* formulář obsahuje chyby */
{
return false;
}
else
{
return true;
}


}
MilanJ
Profil
Když vložím jen tenhle kód pro kontrolu prvního políčka formuláře, šlape to.
Jakmile ale přidám další políčko, nefunguje to a JavaScript to jako by úplně vynechá, tak mi to vysvětlete. :-(


function validate(formular_workshops_std)
{
// smazání všech chybových hlášení, resp. zrušení červeného pozadí chybně vyplněných prvků

document.getElementById('programme_name').style.backgroundColor = '';


var x; /* počítadlo chyb */
x=0; /* pokud zůstane x bez chyby, není ve formuláři chyba */

// pokud není pole formuláře vyplněno, pozadí se změní barvu

if (formular_workshops_std.programme_name.value=="")
{
document.getElementById('programme_name').style.backgroundColor = '#FF0000';
formular_workshops_std.programme_name.focus();
x=1;
}

if (x==1) /* formulář obsahuje chyby */
{
return false;
}
else
{
return true;
}
MilanJ
Profil
Nepoužívám nic, co by nemělo fungovat, mám tedy někde syntaktickou chybu?
MilanJ
Profil
Zná FF document.getElementById('programme_name').style.backgroundColor = '#FF0000'; ?
RPG
Profil
MilanJ
Zná.
zivan
Profil
Dej na web jednoduchou stranku se 2 policky a timhle JS, ktery nebezi ve FF. Me nejak unika pouziti toho parametru. Jestli to dobre chapu, tak ke kezdemu prvku pristupujes dvema ruznymi zpusoby. Proc?

Jinak to konecne vraceni hodnoty bych resil elegantnejsim:

return (x==0);
MilanJ
Profil
zivan
Jestli to dobre chapu, tak ke kezdemu prvku pristupujes dvema ruznymi zpusoby. Proc?
Nerozumím. :-/

Celý formulář běžel jak měl i pod FF, ale pak jsem zřejmě někde něco ...vím já co? ...nevím :-(
zivan
Profil
No chapu spravne, ze tohle jsou stejny prvky?

formular_workshops_std.provider_email
document.getElementById('provider_email')

Nepise ti ve FF konzole nejakou chybu? Nastroje/ Konzola Javascriptu
MilanJ
Profil
zivan
Ano, je to tak.

Konzola mi píše chybu na řádku 179:
Chyba: document.getElementById('mode_of_study').style.backgroundColor = ''; has no properties

Input s id mode_of_study se ale nijak neliší o jiných na stránce...chyba je jen u tohoto
MilanJ
Profil
formular_workshops_std.provider_email
document.getElementById('provider_email')

Souhlasím, tohle je matoucí.
zivan
Profil
Nemas tam misto dvou apostrofu jedny uvozovky?

Edit: Jestli jsi to kopiroval, tak ne.

Nemas u toho prvku 'mode_of_study' nastaven atribut NAME misto ID ? Zkus nekam dat tu stranku, takhle je to jak pexeso.
MilanJ
Profil
Nemám...nakonec...mrkni do zdrojáku.
zivan
Profil
No ja tam vidim chybu v tom, ze u selectu mas atribut NAME a snazis se na ne pristoupit pres getElementById(). Jak nazev funkce napovida, tak by mela vracet prvek podle ID. To, ze to funguje v IE je chyba prohlizece.

Edit: Podobny problem bude i s tim pristupem bez fce getElementById().
Toto téma je uzamčeno. Odpověď nelze zaslat.

0