Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное повидение IE при простом скрипте. 
:(
    Опции темы
MyRoot
Дата 14.9.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Здравствуйте.
Столкнулся с неожиданной проблемой.
При исполнении скрипта IE 6 зависает, а все остальные браузеры(FF,Op,Ch,Saf) исполняют.

Началось всё с того, что мне было нужно реализовать многоязычность (на трех языках) статей на одной странице.
Будучи недалёким в js я написал следующий скрипт, который скрывает и показывает div'ы с контентом.

Код

function show(myId) {
var english = document.getElementById('en');
var czech = document.getElementById('cz');
var russia = document.getElementById('ru');
var condition = myId;

if (condition == "en") {
    english.className = 'show';
    czech.className = 'hide';
    russia.className = 'hide';
    }
else if(condition == "cz"){
    english.className = 'hide';
    czech.className = 'show';
    russia.className = 'hide';

else if (condition == "ru") {
    english.className = 'hide';
    czech.className = 'hide';
    russia.className = 'show';    
}
}


HTML
Код

<a href="javascript:show('en');"><img src="img/en.jpg"/></a>
<a href="javascript:show('cz');"><img src="img/cz.jpg"/></a>
<a href="javascript:show('ru');"><img src="img/ru.jpg"/></a>

<div id="lang-block">
<div id="en" class="show">English</div>
<div id="cz" class="hide">Czech</div>
<div id="ru" class="hide">Russia</div>
</div>


CSS
Код

.hide {
 display:none;
}
.show{ display:inline;}


Подобное решение во всех браузерах сработало нормально.
Но стоило мне перевести всё на реальную страницу http://www.blowup-project.ru/announce/4/
и IE начал просто зависать. Т.е. нагло и непробудимо зависать при попытке нажатия...

Подскажите, как можно решить проблему? Как по-другому реализовать подобный hide\show div?
Спасибо!

Это сообщение отредактировал(а) MyRoot - 14.9.2009, 10:46
PM MAIL   Вверх
bars80080
Дата 14.9.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



а если для дива указать стиль display: block, а не inline?



п.с. реализация мультиязычности с помощью js в 99% случаев - бред
PM MAIL WWW   Вверх
skyboy
Дата 14.9.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



у меня в IE 6 нормально работает(с выдаей alert'a).

PM MAIL   Вверх
MyRoot
Дата 14.9.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



bars80080, что с block, что с inline результат аналогичен.
На счет мультиязычности на js, здесь это будет удобно, потому что контента для скрытия мало. И вслучае отключенного js пользователь просто увидит все три языка друг за другом.


skyboy, У меня он зависает... причем я уж все перепроверял. Наверно проблема в следующем. Я прочитал что для javascript все условия if else имеют одинаковую силу и исполняются не друг за другом, а одним разом. Может проблема в том что, каждая из этих переменных приобретает три разных значения за раз? Как реализовать по-другому?

Я видоизменял скрипт много раз, и IE работает только в случае

Код

function show(myId) {
    
var condition = myId;

if (condition == "en") {
    document.getElementById('en').className = 'show';
    document.getElementById('cz').className = 'hide';
    document.getElementById('ru').className = 'hide';
    }
else if(condition == "cz"){
    document.getElementById('cz').className = 'show';

else if (condition == "ru") {
    document.getElementById('ru').className = 'show';
    }
}



т.е. как только появляются "hide" всё зависает...

Подскажите, может как-то вообще по-другому сделать появление\скриытие div'ов????

Добавлено через 2 минуты и 35 секунд
skyboy,  Вы наверно смотрели как раз в то время, когда я alert'oм проверял работу оператора условия smile))

Это сообщение отредактировал(а) MyRoot - 14.9.2009, 09:41
PM MAIL   Вверх
bars80080
Дата 14.9.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(MyRoot @  14.9.2009,  09:40 Найти цитируемый пост)
Я прочитал что для javascript все условия if else имеют одинаковую силу и исполняются не друг за другом, а одним разом. Может проблема в том что, каждая из этих переменных приобретает три разных значения за раз?

скорее всего что-то не так прочитали


Цитата(MyRoot @  14.9.2009,  00:39 Найти цитируемый пост)
condition = myId

у вас где-нибудь var condition объявлен?



имхо, совет: попробуйте свой скрипт запустить на другой машине и посмотреть на другом ИЕ6. может проблема касается исключительно глюков вашего браузера?
PM MAIL WWW   Вверх
MyRoot
Дата 14.9.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



bars80080
Цитата

скорее всего что-то не так прочитали

Буду внимательнее.
Цитата

у вас где-нибудь var condition объявлен?

Да, потерял вначале строчки var. После объявления ничего не изменилось...

Цитата

попробуйте свой скрипт запустить на другой машине и посмотреть на другом ИЕ6. может проблема касается исключительно глюков вашего браузера?

Ок, спасибо. Ну я хотя бы убедился, что у кого-то работает.

Если у кого-нибудь еще какие идеи есть по моей теме, буду признателен.
PM MAIL   Вверх
skyboy
Дата 14.9.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



зачем тебе собственный вариант реализации getElementById?
PM MAIL   Вверх
comtat
Дата 14.9.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 4
Всего: 71



При сохранении страницы локально в моем IE6 все прекрасно заработало. Хотя с хостинга висло.


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
MyRoot
Дата 14.9.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Цитата

зачем тебе собственный вариант реализации getElementById? 


Так удобнее.

PM MAIL   Вверх
MyRoot
Дата 14.9.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



comtat
Цитата

При сохранении страницы локально в моем IE6 все прекрасно заработало. Хотя с хостинга висло. 

Хм...  мне начинает становиться нехорошо...

Но я взял себя в руки и нашел другой вариант smile)

Код


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
 "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > 
<title>Untitled</title> 
<script type="text/javascript"> 
window.onload = function () { 
  var countries = [ 
    document.getElementById('en'), 
    document.getElementById('cz'), 
    document.getElementById('ru') 
  ]; 
  var i, countryLinks = document.getElementById('countryLinks'); 
  function groupSelector(el, elList) { 
    var i, numItems = elList.length; 
    // hide all items in the list 
    for (i = 0; i < numItems; i++) { 
      elList[i].style.display = 'none'; 
    } 
    // show the one item 
    if (el != null) { 
      el.style.display = 'block'; 
    } 
  } 
  // Attach handler to links 
  var cLinks = countryLinks.getElementsByTagName('a'); 
  for (i = 0; i < cLinks.length; i++) { 
    cLinks[i].onclick = function (el, elList) { 
      return function () { 
        groupSelector(el, elList); 
        return false; 
      }; 
    }(document.getElementById(cLinks[i].href.substr(cLinks[i].href.indexOf('#')+1)), countries); 
  } 
}; 
</script> 
</head> 
<body> 
<div> 
  <ul id="countryLinks"> 
    <li><a href="#en">en</a></li> 
    <li><a href="#cz">cz</a></li> 
    <li><a href="#ru">ru</a></li> 
  </ul> 
  
  
  <div id="en">EN</div> 
  <div id="cz" style="display:none;">CZ</div> 
  <div id="ru" style="display:none;">RU</div> 
</div> 

</body> 
</html> 


Но и он виснет smile))
Значит после добавления  float:left; к ul#countryLinks li интернет эксполрер зависает....
Без него всё работает smile)

Это сообщение отредактировал(а) MyRoot - 14.9.2009, 11:22
PM MAIL   Вверх
diadiavova
Дата 14.9.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Я сам созданием сайтов не занимаюсь, но иногда бывает нужно разместить в сети какую-нибудь страничку. У меня есть эккаунт на яндексе, поэтому в случае чего я размещаю страничку на "народе".
Однажды столкнулся с ситуацией, когда нормально работавшая на локальной машине страница, на "народе" вдруг стала отображаться "сикось-накось". Немного пошаманив, я понял в чём было дело. Яндекс, предоставляя бесплатный хостинг, вставляет в каждую страницу свою рекламу(со скриптом). У меня страница была написана на XHTML. И как я понял, яндексовская вставка просто не дружит с этим форматом. В моём случае оказалось достаточно убрать доктайп и пространство  имён, и всё заработало.
Скрипт я немного оптимизировал(для большей универсальности), но не факт, что проблема решится, видимо надо согласовывать с другими блоками. А то, что в некоторых случаях работает, так это может и от настроек зависеть.
Код

<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style type="text/css">
            .langVisible
            {
                display:block;
            }
            .langHidden
            {
                display:none;
            }
            .langImg
            {
                cursor:pointer;
            }
        </style>
    </head>
    <body>
        <div>
            <img src="img/en.jpg" class="langImg" alt="en" onclick="selectLangBlock('en')"/>
            <img src="img/cz.jpg" class="langImg" alt="cz" onclick="selectLangBlock('cz')"/>
            <img src="img/ru.jpg" class="langImg" alt="ru" onclick="selectLangBlock('ru')"/>
        </div>
        <div id="lang-block">
            <div id="en" class="langVisible" name="langBlock">English</div>
            <div id="cz" class="langHidden" name="langBlock">Czech</div>
            <div id="ru" class="langHidden" name="langBlock">Russia</div>
        </div>

        <script type="text/javascript">
            function selectLangBlock(language)
            {
                var lbList = document.getElementsByName("langBlock");
                for(var i=0;i<lbList.length;i++)
                {
                    lbList.item(i).className=lbList.item(i).id==language?"langVisible":"langHidden";
                }
            }

        </script>
    </body>
</html>




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
MyRoot
Дата 14.9.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Большое спасибо.
Это проблема у меня во всей верстке страницы, которая, видимо, вызвала какой-то баг IE
Тот же самый кусок кода 
Код

<div id="flag-box">
  <ul id="countryLinks"> 
    <li id="eng"><a href="#en"><img src="img/en.jpg"/></a></li> 
    <li id="czh"><a href="#cz"><img src="img/cz.jpg"/></a></li> 
    <li id="rus"><a href="#ru"><img src="img/ru.jpg"/></a></li> 
  </ul> 
  
<div id="lang-block">
  <div id="en">[*content*]</div> 
  <div id="cz" style="display:none;">[*content-cz*]</div> 
  <div id="ru" style="display:none;">[*content-ru*]</div>
</div>
</div>

исполняется нормально на любом другом месте страницы. Но в том контейнере, в котором он был помещен изначально, происходит фигня.
Буду копаться дальше.

Найдена причина бага IE
Данный блок id="flag-box" должен был лежать в контейнере <div id="ab-content">
но по ошибке строчка <div id="ab-content"> повторилась дважды.
Т.е. получилось
<div id="ab-content"><div id="ab-content">
<div id="flag-box">
  <ul id="countryLinks"> 
    <li id="eng"><a href="#en"><img src="img/en.jpg"/></a></li> 
    <li id="czh"><a href="#cz"><img src="img/cz.jpg"/></a></li> 
    <li id="rus"><a href="#ru"><img src="img/ru.jpg"/></a></li> 
  </ul> 
  
<div id="lang-block">
  <div id="en">[*content*]</div> 
  <div id="cz" style="display:none;">[*content-cz*]</div> 
  <div id="ru" style="display:none;">[*content-ru*]</div>
</div>
</div>
</div>
Что привело IE к бесконечному зависанию, после исполнения.

Огромное спасибо всем.

Это сообщение отредактировал(а) MyRoot - 14.9.2009, 11:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1109 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.