Autor Zpráva
Stepanka
Profil *
Ahoj,

prosím o pomoc. Mám jednu velice jednoduchou javascriptovou funkci, takovouto: (používám ji ve formuláři pro zadávání adresy)

function prepni(){
        if (document.getElementById("chk").checked==true)
            {
            document.getElementById("f0").style.display='inline';
            document.getElementById("f1").style.display='inline';
            document.getElementById("f2").style.display='inline';
            document.getElementById("f3").style.display='inline';
            document.getElementById("f4").style.display='inline';
            document.getElementById("f5").style.display='inline';
            document.getElementById("ulice_dod").style.display='inline';
            document.getElementById("cislo_dod").style.display='inline';
            document.getElementById("obec_dod").style.display='inline';
            document.getElementById("psc_dod").style.display='inline';
            document.getElementById("zeme_dod").style.display='inline';
            document.getElementById("nazev_stat_fakturacni").disabled=false;
            document.getElementById("nazev_stat_dodaci").disabled=true;
            }
        else
            {			
            document.getElementById("nazev_stat_fakturacni").value=document.getEle mentById("nazev_stat_dodaci").value;
            document.getElementById("f0").style.display='none';
            document.getElementById("f1").style.display='none';
            document.getElementById("f2").style.display='none';
            document.getElementById("f3").style.display='none';
            document.getElementById("f4").style.display='none';
            document.getElementById("f5").style.display='none';
            document.getElementById("ulice_dod").style.display='none';
            document.getElementById("cislo_dod").style.display='none';
            document.getElementById("obec_dod").style.display='none';
            document.getElementById("psc_dod").style.display='none';
            document.getElementById("zeme_dod").style.display='none';
            document.getElementById("nazev_stat_fakturacni").disabled=true;
            document.getElementById("nazev_stat_dodaci").disabled=false;
            }
}


Jde o to, že při kliknutí na checkbox s ID="chk" se: objeví 4 nové textové inputy, objeví se disablovaný selectbox s ID="nazev_stat_dodaci" a původně disablovaný selectbox s ID="nazev_stat_fakturacni" se změní na editovatelný.

Při odškrtnutí checkboxu se: 4 nové textové inputy schovají, schová se také disablovaný selectbox s ID="nazev_stat_dodaci" a selectbox s ID="nazev_stat_fakturacni" se změní na zpět needitovatelný.

Funguje to úplně perfektně ve FF, ale v IE i v Opeře se ty selectboxy nemění. Prostě jsou oba pořád needitovatelné.

Vím, že existuje Java konzola v IE, ale ta mi žádné chyby nehlásí (teda pokud se nepozná ještě jinak, než tak, že v levé doní části je žlutý trojúhelník, ten tam totiž nemám, mám zobrazen jen nápis Hotovo).

Nevíte někdo, jak bych mohla zjistit, co je v té funkci špatně?

Děkuju moc.
Chamurappi
Profil
Reaguji na Stepanku:
Vím, že existuje Java konzola v IE
JavaScript a Java jsou dva naprosto odlišné jazyky, které mají akorát trochu podobnou syntaxi.

při kliknutí na checkbox s ID="chk" se […]
Jak zjišťuješ ono kliknutí? Voláš „prepni()“ na onclick nebo na onchange? Spolehlivější je onclick.

Pomohla by živá ukázka.
Stepanka
Profil *
Chamurappi

Děkuji za reakci.

Nevím co si přesně představit pod pojmem "živá ukázka", ale hned přikládám skript, který je s tím Javascriptem spojený, čili jednu část formuláře:

$query_stat = mysql_query("SELECT id_stat, $nazev_statu AS nazev
                                FROM doprava_staty
                                ORDER BY nazev") or die(mysql_error());

echo __STAT__.': ';
echo '<select id="nazev_stat_fakturacni" name="nazev_stat_fakturacni" '; 
if (isset($_SESSION['obj']['nazev_stat_fakturacni']) AND !isset($_SESSION['obj']['nazev_stat_dodaci'])) 
   echo "disabled";
echo '>';
echo '<option value="">'.__VYBER__.'</option>';
while ($row_stat=mysql_fetch_array($query_stat)) {
   echo '<option ';
   if (($_SESSION['obj']['nazev_stat_fakturacni'] == $row_stat['nazev']) OR 
						(!isset($_SESSION['obj']['nazev_stat_fakturacni']) AND !isset($_SESSION['obj']['nazev_stat_dodaci']) AND $_SESSION['obj']['stat'] == $row_stat['nazev']))
      echo ' selected="selected" ';
   echo ' value="'.$row_stat['nazev'].'">'.$row_stat['nazev'].'</option>';
}
echo '</select>';

$check='';
$style='display:none';
if (isset($_SESSION['obj']['nazev_stat_dodaci'])) {
    $check='checked="checked"';
    $style='display:inline';
}        
        
echo '<input name="dodaci_adr_jina" '.$check.' id="chk" onclick="prepni()" onload="prepni()" type="checkbox">&nbsp;<label for="chk">'.__DODACI_JINA_NEZ_FAKTURACNI__.'</label><span id="f0" style="'.$style.'" class="chyba_form">';
   if (isset($chyba['dodaci_adresa'])) echo $chyba['dodaci_adresa'];
echo '</span>
   <div id="f1" style="'.$style.'">'.__ULICE__.':</div>
   <input style="'.$style.'" id="ulice_dod" type="text" name="ulice_dod" size="27" value="'.$ulice_dod.'" class="na" />';
echo '<div id="f2" style="'.$style.'"> '.__CISLO__.':&nbsp;</div><input style="'.$style.'" type="text" id="cislo_dod" name="cislo_dod" size="10" value="'.$cislo_dod.'" class="na" />';
echo '<div id="f3" style="'.$style.'">'.__MESTO__.':</div>
   <input style="'.$style.'" id="obec_dod" type="text" name="obec_dod" size="50" value="'.$obec_dod.'" class="na"/>';
echo '<div id="f4" style="'.$style.'">'.__PSC__.':</div>
   <input style="'.$style.'" id="psc_dod" type="text" name="psc_dod" size="50" value="'.$psc_dod.'" class="na"/>';
echo '<div id="f5" style="'.$style.'">'.__STAT__.':</div>';
		
echo '<div style="'.$style.'" id="zeme_dod">';
$query_stat = mysql_query("SELECT id_stat, $nazev_statu AS nazev
                                FROM doprava_staty
                                ORDER BY nazev") or die(mysql_error());
echo '<select id="nazev_stat_dodaci" name="nazev_stat_dodaci" disabled>';
echo '<option value="">'.__VYBER__.'</option>';
while ($row_stat=mysql_fetch_array($query_stat)) {
   echo '<option ';
   if ($_SESSION['obj']['id_stat'] == $row_stat['id_stat'])
      echo ' selected="selected" ';
      echo ' value="'.$row_stat['nazev'].'">'.$row_stat['nazev'].'</option>';
}
echo '</select></div>';


Snažila jsem se to co nejvíce očistit od všech <td>, <tr> a podobných.. Mám ale takový pocit, že když se na ten kód podíváte, že mi asi nic neporadíte. Protože ve Firefoxu to běží skvěle, takže žádná větší chyba tam není.
To spíš v té JS funkci bude nějaký kousek, který exploreru vadí. Ale nemůžu na něho přijít..

Neexistuje nějaký nástroj (třeba v IE, když tam mi to nejede), který by ten kód prošel a označil, co mu vadí, nebo čemu nerozumí?
peta
Profil
Stepanka
PHP kod nas nezajima, pouze HTML/CSS/JS. toto zobrazuje prohlizec, php zpracuje server. Cili odkaz na stranku. Coz jsem uvedl tez ve svem smazanem prispevku.
Chamurappi
Profil
Reaguji na Stepanku:
Živá ukázka je ukázka problému, která může žít a „problémovat“ i v mých prohlížečích.
bohyn
Profil
Neexistuje nějaký nástroj (třeba v IE, když tam mi to nejede), který by ten kód prošel a označil, co mu vadí, nebo čemu nerozumí?
Bohuzel pro IE neco takoveho neni, ale obcas muze pomoci debugbar nebo Internet Explorer Developer Toolbar
Opera ma taky developer tools - dragonfly

v Opere kdyz otevres chybovou konzoli tak bys mela videt kde je chyba
Stepanka
Profil *
Chamurappi
Ok, děkuju, tak jestli bys mohl se kouknout například na stránku tuto.., vložit si cokoliv do košíku, přejít do košíku, vyber jakýkoliv stát, jakoukoliv platbu a ocitneš se na stránce objednavka-krok2.html. Zde je ten checkbox. Při jeho zaškrtnutí se musí ten horní needitovatelný select změnit na editovatelný..

Je to moje testovací verze, nemusíš se bát, že bys něco koupil :-)

Moderátor Chamurappi: Na níže zmíněné přání jsem odmazal odkaz.
Stepanka
Profil *
peta
Tvůj příspěvek jsem si stihla přečíst dřív, než byl smazán. Děkuju za snahu a za radu, ale i když jsem změnila document.getElementById('nazev_stat_fakturacni').disabled=true; na document.getElementById('nazev_stat_fakturacni').disabled="disabled"; , tak mi to dělalo to samé co předtím.

Navíc nevím jak potom označit select za editovatelný... když dám například document.getElementById('nazev_stat_fakturacni').enabled="enabled"; (což je asi velká blbost :-) ) tak to nefunguje už ani ve Firefoxu..
Chamurappi
Profil
Reaguji na Stepanka:
Máš před <select>em v kódu i skrytý <input> s name="nazev_stat_fakturacni". Metoda document.getElementById funguje v Exploreru tak, že hledá i podle atributu name, ne jen podle id. Proto tento tvůj skript:
document.getElementById("nazev_stat_fakturacni").disabled=false;
… zakáže místo <select>u onen skrytý <input>.

Přejmenuj skrytý <input> a problém by měl zmizet.

K petovi: „Tvůj příspěvek jsem si stihla přečíst dřív, než byl smazán.
Omlouvám se, že jsem ho nestihl smazat dřív, peta zde ten svůj blud o disabled="disabled" šíří už dlouho a evidentně si ho nenechá vymluvit. Tvůj kód s „disabled = true“ a „checked == true“ byl samozřejmě správně.
Stepanka
Profil *
Chamurappi
Jéé děkuju, ono to fakt pomohlo :-) Akorát NAME inputu se mi měnit nechtělo, protože ho potom používám v celém kódu a to by bylo moc přepisování, ale změnila jsem ID jak v kódu, tak v té JS funkci a výsledej je stejný. Jsi moc hodný, fakt děkuju.

PS: Mohl bys, prosím prosím, smazat ten můj příspěvek, ve kterém jsem uvedla ten odkaz? (je můj třetí od vrchu) Teda jestli nevadí a jestli můžeš. Díky.
peta
Profil
Chamurappi
1. psal jsem o disabled, protoze to tak skutecne funguje spolehlive. Pokud nejaky prohlizec podporuje true je to spis jeho plus. blud?
Davam prednost jistote nez novinkam v prohlizeci.
2. psal jsem o odkaz na stranku. blud?
3. popsal jsem, jak by mohla zjistit chybu, pokud se neukazuje zluty trojuhelnik. Je mozne, ze v tomto pripade by to nepomohlo, ale ptala se na to. blud?

A pripomenme si tvuj prispevek, ktery resi vsechny otazky:
'JavaScript a Java jsou dva naprosto odlišné jazyky'
co to vyresilo?
'Jak zjišťuješ ono kliknutí? Voláš „prepni()“ na onclick nebo na onchange? Spolehlivější je onclick. '
Neni to uplne stejne jako moje bludy o dissabled?
'Pomohla by živá ukázka.'
A dalsi blud podobny memu. Uz vim, proc me prispevky zaslouzi smazat. Staci 1 chamurapi, 2 je moc.

Pristup moderatoru tohoto fora mne v poslednich 2 mesicich fakt mrzi.
Jedine plus, ze se ti chtelo vrtat v php kodu, ktery je zhlediska hledani chyb v podstate nepouzitelny. Nevim, jake ma sql tabulky a dalsi veci. Takze bych pulku veci musel dopsat, vydedukovat, tipovat, jestli select vrati, co by mel a jestli to ma vliv na JS.
Chamurappi
Profil
Reaguji na peta:
psal jsem o disabled, protoze to tak skutecne funguje spolehlive.
Nastavení hodnoty funguje spolehlivě, protože Boolean("") je false a Boolean("disabled") je true.
Otestování hodnoty už samozřejmě nefunguje, protože pokud porovnáváš něco.checked == "checked", dostaneš false vždy. I když je zaškrtnuto. Vyzkoušej si to.

Pokud nejaky prohlizec podporuje true je to spis jeho plus. blud?
Ano, blud. Každý tvůj příspěvek, který ho zopakuje, beru jako spam a je mojí povinností jej smazat.

Davam prednost jistote nez novinkam v prohlizeci.
To, že tzv. „boolean atributy“ reflektují v DOMu vlastnosti mající boolean hodnoty, není žádná novinka. Tak to platí odjakživa ve všech prohlížečích znalých JS. Nastuduj si příklady na JPW.

popsal jsem, jak by mohla zjistit chybu, pokud se neukazuje zluty trojuhelnik
Psal jsi doslova „nekdy je treba povolit odchytavani chyb v Nastaveni - zabezpeceni“, což mi připadá jako blud.

Neni to uplne stejne jako moje bludy o dissabled?
Není. Vyzkoušej si, jak šlape onchange na zaškrtávátku v Exploreru.

Pristup moderatoru tohoto fora mne v poslednich 2 mesicich fakt mrzi.
Jestli se ti tady nelíbí, tak sem nechoď.

Jedine plus, ze se ti chtelo vrtat v php kodu
Chybu jsem našel při pohledu do HTML kódu stránky odkázané v příspěvku #7. Z ukázaného PHP skriptu vyčíst nešla.

Nevim, jake ma sql tabulky a dalsi veci.
Nepotřebuješ vědět.
peta
Profil
Chamurappi
Otestování hodnoty už samozřejmě nefunguje ... něco.checked == "checked"
Protoze neumis javascript. Porovnava se ===

„popsal jsem, jak by mohla zjistit chybu, pokud se neukazuje zluty trojuhelnik“
Psal jsi doslova „nekdy je treba povolit odchytavani chyb v Nastaveni - zabezpeceni“, což mi připadá jako blud.
... myslet si muzes, co chces, ja to mam vyzkousene. Zkus se nekdy podivat do menu zabezpeceni po default instalaci a zkus otestovat tyhle scripty s chybami:
* ajax GET/POST
* casovac
* nejaky normalni script
* document.write
Skoro bych se vsadil s tebou, ze ajax nebo casovac ti neukaze chybu, ikdyz chyba nastala, treba pri komunikaci pres post ...

#7 Moderátor Chamurappi: Na níže zmíněné přání jsem odmazal odkaz.
V prispevku 7 NENI, opakuji pro mene chapave, opravdu NENI zadny odkaz a v dobe kdy jsem se dostal ke cteni nebyl. Ci je to chyba?

„Nevim, jake ma sql tabulky a dalsi veci.“
Nepotřebuješ vědět.
... Viz predchozi odstavec o odkazu na kod. Jestlize mas pouzit jeji PHP kod, potrebujes vedet vse, co se tyka zobrazeni stranky. Vcetne nastaveni PHP serveru, SQL tabulek a podobne.

Jinymi slovy tohle tema muzes tedy klidne smazat cele. Jednak je problem vyresen a druhak , diky tvym upravam je pro ostatni problem neresitelny. Tolik, co mam proti zasahum moderatora.
Chamurappi
Profil
Reaguji na peta:
Protoze neumis javascript. Porovnava se ===
Tři rovnítka mají oproti dvěma navíc jen typovou kontrolu.
Vyrobil jsem ti názornou ukázku. Najdi mi prohlížeč, který se na ní chová jinak, než tvrdím.

... myslet si muzes, co chces, ja to mam vyzkousene.
Bohužel ti to nevěřím. Mám tu ve virtuálních strojích k dispozici čistou instalaci Explorerů 5, 6, 7 a 8 beta, ve všech se při prvním spuštění bez jakéhokoliv zásahu do nastavení chyby ukazují.

ajax nebo casovac ti neukaze chybu, ikdyz chyba nastala, treba pri komunikaci pres post
Nastane-li chyba při HTTP komunikaci, žádná javascriptová výjimka nevznikne. To nejde nijak ovlivnit v nastavení zabezpečení.

V prispevku 7 NENI, opakuji pro mene chapave, opravdu NENI zadny odkaz
Všiml jsem si, že tam NENÍ. Možná to méně chápavé překvapuje, ale proto jsem ho odmazal, aby tam NEBYL.

v dobe kdy jsem se dostal ke cteni nebyl. Ci je to chyba?
To přeci není chyba. Píšeš, že jsem lovil chybu v PHP kódu, já ti proto oznamuji (nehádám se), že jsem ji lovil z odkazu, který byl v příspěvku #7. Byl tam v době, kdy jsem odpovídal já, a nebyl tam v době, kdy jsi reagoval ty. Proč by to měla být něčí chyba? Bereš si všechno moc osobně.

Jednak je problem vyresen a druhak , diky tvym upravam je pro ostatni problem neresitelny.
Řešení problému i jeho příčina tu napsané jsou. Kdybych odkaz nechal, čemu by to pomohlo? Vždyť na dané stránce už je závada opravená.
Leo
Profil
Nechcete nekdo spachat dobry trestny cin a petu zastrelit? Podstatne by se zvysil pomer signal/sum tohohle diskusniho fora, Leo
pеtа
Profil *
Leo
google.com najemny vrah
Chаmurаppi
Profil *
Reaguji na pеtu:
Porušuješ pravidla stanovená pro peta:
Odkazuješ-li, použij skutečný odkaz, ne slovní popis.


Znamenám si na seznam návrhů pro příští kouli: zakázat azbuku a jiné nečeskoslovenské paznaky.
peta 
Profil *
A taky paznaky, které nejdou vidět.
Stepanka
Profil *
peta
Peťo, to je náhoda, nebo nám děláš na škole správce? http://www.slu.cz/author/f_spravce
peta
Profil
Stepanka
peta  (peta mezera nebo nbsp) a
peta Člen (peta bez mezery) Jsou 2 rozdilne osoby.
Ano, delam spravce webu FPF.
peta
Profil
OT
Chamurappi
Nemuzu ted najit fora, ale
prvak, druhak, tretak, ctvrtak, patak, sestak, sedmak, osmak jsou normalni ceska slova pro oznaceni osoby studujici urcity rocnik ZS :)
pеtа
Profil *
prvak, druhak, tretak, ctvrtak, patak, sestak, sedmak, osmak jsou normalni ceska slova
Tak je piš normálně česky, na cestinu nejsem zvedavy.
vospunt
Profil
            document.getElementById("nazev_stat_fakturacni").value=document.getEle mentById("nazev_stat_dodaci").value;

mělo by to být
            document.getElementById("nazev_stat_fakturacni").value=document.getElementById("nazev_stat_dodaci").value;

:D víc netuším :D

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0