Autor Zpráva
marcus33cz
Profil
Ahojte,

mám takovou jednoduchou funkci na přepínání obsahu podle toho, co uživatel vybere:

function showHideByOperator(elementID){
    if( elementID.value=="vodafone" || elementID.value=="tmobile" ){
    
        document.getElementById('hideable').style.display = 'table-row-group';      
        document.getElementById('smsLeftSubwrapper').style.display = 'none';
        document.getElementById('paymentTopForm').style.display = 'none';
        
    } else if( elementID.value=="o2" ){
    
        document.getElementById('hideable').style.display = 'none';
        document.getElementById('smsLeftSubwrapper').style.display = 'block';
        document.getElementById('paymentTopForm').style.display = 'block';
        
    }
} 


Problém je na řádku s table-row-group, protože IE<=7 a nižší to nepodporuje. Pro tyto verze IE bych tam rád místo table-row-group dal block nějakou podmínkou. To se mi bohužel nedaří.

Neporadil by někdo, jak by se tam dala vložit nějaká chytrá podmínka?
Díky moc

P.S.: Dát pryč tabulku, nastylovat DIVy a pro všechny prohlížeče dát display: block mě taky napadlo, ale až jako poslední možnost. :-)
Chamurappi
Profil
Reaguji na marcuse33cz:
1) Proč chceš podmínkovat konkrétní prohlížeč? Proč neodchytíš příčinu problému a neošetříš přímo ji? „Problém je na řádku s table-row-group“ — vyhodí výjimku, tu můžeš chytit.
2) Je opravdu nutné nastavovat konkrétní display? Ve stylopisu máš pro dotyčné <tbody> nastaveno display: none? Jestli ne, zrušit display v atributu style jde nastavením element.style.display = ''.
3) Používej třídy (ideálně jednu na společném rodičovi) a nekompatibility řeš na úrovni CSS.
marcus33cz
Profil
1) Není to nutné, klidně uvítám řešení pro všechny prohlížeče, které nepodporují table-row-group. Z 99 % to u mých uživatelů je Internet Explorer <=7. Proč neodchytím příčinu? Nevím jak, tohle je kód slepený dohromady, JavaScript neumím.

2) tbody má display: none. Když dám element.style.display='' tak mi ten prvek nezmizí. Nevím, co by v tom případě bylo cílem.

3) Třídy klidně používat budu, to není můj problém. Nebráním se řešení přes CSS, pokud bude nějaké možné jednodušší.

Když uživatel vybere volbu A a používá prohlížeč nepodporující table-row-group, zobrazit element A jako block.
Když uživatel vybere volbu A volbu a používá prohlížeč podporující table-row-group zobrazit element A jako table-row-group.

Když uživatel vybere volbu B, element A schovat a zobrazit element B jako block.
_es
Profil
marcus33cz:
Proč neodchytím příčinu? Nevím jak, tohle je kód slepený dohromady, JavaScript neumím.
Použi príkazy try...catch.
Chamurappi
Profil
Reaguji na marcus33cza:
tbody má display: none.
Ve stylopisu?

Když dám element.style.display='' tak mi ten prvek nezmizí.
To ho zviditelní, pokud nemá display: none nastavený jinde než v atributu style.

Nebráním se řešení přes CSS, pokud bude nějaké možné jednodušší.
Uživatel vybere volbu A, nastavíš document.getElementById("společný-rodič").className = "stav-A".
Uživatel vybere volbu B, nastavíš document.getElementById("společný-rodič").className = "stav-B".
Zbytek nechť udělá CSS. Řešit podporu CSS v JavaScriptu není vůbec nutné.

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