Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрипт не работет в IE (https://javascript.ru/forum/css-html/4772-skript-ne-rabotet-v-ie.html)

alexKniaz 19.08.2009 16:13

Скрипт не работет в IE
 
Вот таблица стилей :
<style type="text/css">
#informers_selector_content>div{display:none;}
#informers_selector_menu>span:hover{
text-decoration:underline;
border-top:1px outset #d5d5d5;
border-left:1px outset #d5d5d5;
border-right:1px outset #d5d5d5;
border-color:#d5d5d5;
}
</style>

Вот JS
<script type="text/javascript">
function setActive(obj,active){if(active==true){obj.style.display='block';}else{obj.style.display='none';}}

function activate(obj,name){
var showid=new String(obj.id);
var len=showid.length;
var showid=showid.substr(2,len);
var obj=document.getElementById(name+'_selector_content');

for (var childItem in obj.childNodes) {
 if (obj.childNodes[childItem].nodeType == 1){
  if(obj.childNodes[childItem].id==showid){setActive(obj.childNodes[childItem],true);}
  else{setActive(obj.childNodes[childItem],false);}
 }
}
}

function setTabs(name){
var obj=document.getElementById(name+'_selector_menu');
var len=obj.childNodes.length;
for(i=1;i<len;i++){
 var sObj=obj.childNodes.item(i);
 sObj.onclick=function(){activate(this,name);}
}
}

window.onload=function(){setTabs('informers');}
</script>


И вот HTML :
<div id="informers_selector_menu">
 <span id="shrecomendate" onclick="activate(this,'informers');">Рекомендуем</span>
 <span id="shweather">Погода</span>
 <span id="shnews">Новости</span>
 <span id="shsoft">Софт</span>
 <span id="shhardware">Оборудование</span>
 <span id="shother">Другое</span>
</div>
<div id="informers_selector_content">
<div id="recomendate">
1
</div>
<div id="weather">
2
</div>
<div id="news">
3
</div>
<div id="soft">
4
</div>
<div id="hardware">
5
</div>
<div id="other">
6
</div>
</div>



Итоги :
1) работет в OPERA в IE - нет.
2) при добавлении в DIV-ы с контентом вкладок (да, да 1,2,3,4,5,6) HTML-тегов перестаёт работаьб даже в OPERA
------------------------------------------
После изменения JS кода в IE при клике на 1-м спане (у которого id==shrecomendate) отображается див recomendate, у остальных - ничего не происходит при кликах на их div-ах.
-------------------------------------------
Причина 2-й проблемы ясна - ошибка в CSS. Исправил

alexKniaz 20.08.2009 01:57

Решил проблему
 
Проблему решил.
по пунктам:
1) определил что при sObj.onclick=function(){activate(this,name);} происходила ошбка. Выяснил, что под IE должно делаться через sObj.setЧто-тоТам.
2) попытался ввести проверку браузера через navigator.userAgent. Попытка с треском провалилась, т.к. и IE и OPERA вылетали.
3) Сделал на основе данного 2 скрипта - один - без изменений - второй через setЧто-тоТам. и заставил серверный скрипт по user-agent, определять, какой выдавать.
4) IE ОТКАЗЫВАЛСЯ РАБОТАТЬ, КАК ПРОКЛЯТЫЙ (хотя почему как, клятые MS)...
Т.е. даже предназначеный ишаку метод не работал.
5) нашёл гениальный выход из положения. Т.к. sObj - спан, реализующий элемент меню вкладки, то получил его текст, и inneHTML-ем создал внутри него ещё спан, в котором в виде текста всё описывалось событие:
Код для будущих поколений:D
....
var text=sObj.innerText;
sObj.innerHTML='<span onclick="var obj=document.getElementById('+"'"+sObj.id+"'"+');activate(obj,' +"'" + name + "'" + ');">'+text+"<\/span>";
....

Моё мнение : им в винду надо оперу или файрфокса засунуть и забыть про IE (мелкомягким). А также выплатить компенсацию всем JS-кодерам, скрипты которых стало возможно упростить


Часовой пояс GMT +3, время: 20:58.