Autor Zpráva
Eda
Profil *
Zdravím,

řeším teď zajímavý problém:
mám PHP skript, který mi generuje formulář o velkém počtu polí. Část těchto polí je skrytá (...type='hidden'...). Při dalším vývoji mi neseděla jedna hodnota u jednoho skrytého (hidden) pole formuláře s tím, co měl generovat skript. V panelu HTML mi Firebug ukazoval "...value="6"..." místo očekávaného "...value="5"...". Pro jistotu jsem tedy kouknul přímo do zdrojového kódu přes Menu Firefoxu a co nevidím. Na sledovaném místě je "...value="5"...". Nj, jenomže co s tím? Zkusil jsem to ještě v Google Chrome 5.0 a Opeře 10 a vše šlo dle očekávání s "...value="5"...". Jak se tedy ta šestka do kódu ve Firefoxu dostala? Zkusil jsem tedy v PHP skriptu vytisknou krom elementu "value" onu "5" i do elementu "value2". Firebug ukázal tohle: "...value="6" value2="5"...". Dále jsem zkusil změnit type elementu z hidden na text, opět to vedle ke chtěné "5". Zkusil jsem také ve Firebugu zadat sledování hodnoty elementu, ihned po vytvoření to je údajně s value "6". Zajímavé je, že při změně "name" elementu se vypsala požadovaná "5". Změna "id" neměla vliv. Další test spočíval v bezprostředním vypsání hodnoty JS alertem ihned po jeho vytvoření (bezprostředně za element jsem vložil <script>window.alert...</script>). Opět nic a i alertek mi vypsal 6. Už opravdu nevím, co mám vyzkoušet, abych vysledoval, jak se tam ta zatracená šestka dostala. Asi to bude nějakým JS, protože při vypnutém JS v prohlížeči se vypíše požadovaná 5. Když jsem ale zkusil oba soubory skriptů, co ke stránce běžně přikládám, nepřiložit, chyba se stále projevovala. V ostatních prohlížečích pořád jen správná a bezchybná "5". Čím to může být?Budu bych rád za každou radu. Zatím to řeším tak, že type nastavím na text a nastyluju input tak, aby nebyl vidět. Není to ale zrovna nejčistší řešení. Hlavně mě ale štve, že vůbec nemůžu přijít na to, kde je chyba, a ani všemožné sledovací nástroje mi nedovedou poradit.

Eda
Chamurappi
Profil
Reaguji na Edu:
Vytvořím-li čistou stránku a dám-li do ní skrytý <input> s value="5", zůstane tam value="5". Chyba musí být v něčem, co jsi nezmínil, a proto ji teď tady těžko někdo najde.

Čím to může být?
Nejsem jasnovidec.
1) Nezmínil jsi verzi Firefoxu, jen verze ostatních prohlížečů.
2) Nezmínil jsi, zda se problém vyskytne i při úplně prvním načtení stránky (při znovunačtení se prohlížeč snaží vyplnit hodnoty, které měl před znovunačtením).
3) Nezmínil jsi, zda se závada projevuje jen ve tvé instalaci, nebo u všech uživatelů.
4) Nezmínil jsi, zda používáš nějaký druh automatického vyplňování formulářů.
5) Nezmínil jsi, zda je problém jen se zobrazením atributu value ve Firebugu, nebo i s odeslanou hodnotou (která je ve vlastnosti value, v tom může být rozdíl).

Takže prosím o odkaz na živou ukázku.
_es
Profil
Eda:
Bez odkazu na problém je ťažko radiť.
Možno bude chyba v rozdieloch medzi prehliadačmi popísanými napríklad v tomto príspevku.
Niekde v nejakom HTML atribúte asi budeš mať "value = nejaká_hodnota;", alebo "value++", alebo sa spoliehaš na automatické vytváranie globálnych objektov podľa name alebo id, ktoré môže byť v rôznych prehliadačoch rôzne.
Alebo nechcene používaš globálnu premennú value.
Premiestnenie definície ovládačov mimo HTML atribúty by to celé mohlo vyriešiť.
Eda
Profil *
Děkuji moc za všechny rady. Nakonec jsem díky nim přišel na to, že hodnotu mi modifikuje prohlížeč, když se ji snaží automaticky doplnit, což mě velmi překvapilo, protože u skrytého inputu bych to opravdu nečekal. Doplnil jsem mu tedy "autocomplete='off'" a již to funguje dle očekávání.

Na problém rozdílu atributu "value" a vlastnosti "value" jsem shodou okolností potom narazil také. Díky vám jsem ale už byl připraven a podařilo se mi problém vyřešit. Do včerejška jsem o tom, že stejný atribut a vlastnost mohou mít rozdílnou hodnotu, neměl ponětí, všechno jsem viděl tak nějak zjednodušeně. Škoda, že nikde na netu není souhrnný článek (nebo se mi ho zatím nepodařilo najít) o této problematice. Je to poměrně zajímavé.

S pozdravem
Eda

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0