| Autor | Zpráva | ||
|---|---|---|---|
| marcus33cz Profil |
#1 · Zasláno: 14. 9. 2011, 13:55:35
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 |
#2 · Zasláno: 14. 9. 2011, 14:07:47
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 |
#3 · Zasláno: 14. 9. 2011, 14:30:28
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 |
#4 · Zasláno: 14. 9. 2011, 14:35:49
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 |
#5 · Zasláno: 14. 9. 2011, 14:53:43
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é. |
||
|
Časová prodleva: 15 let
|
|||
0