Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Странное повидение IE при простом скрипте. (https://javascript.ru/forum/dom-window/5085-strannoe-povidenie-ie-pri-prostom-skripte.html)

JustViktor 14.09.2009 02:17

Странное повидение IE при простом скрипте.
 
Здравствуйте.
Столкнулся с неожиданной проблемой.
При исполнении скрипта 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');
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';    
}
}


<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?
Спасибо!

Gozar 18.09.2009 20:14

if (condition == "en") {
    }
else if(condition == "cz"){
} 
else (condition == "ru") {

}

Gvozd 18.09.2009 21:38

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

2 Gozar,
не пишите глупостей

Gozar 21.09.2009 14:31

Gvozd
В чем собственно вы видите глупость в написанном мной?
Глядя на представленный код я не нашел причины почему он должен зависать в ie, поэтому предположил что это из-за того что оканчивается на else if.

Если это не играет роли, то надо просто было сказать это не играет роли, а не опускаться до оскорблений.

Gvozd 21.09.2009 14:47

Gozar,
вы написали синтаксически неверную конструкцию
после else не должно писатся условие
else является последним блоком, выполняющимся, при невыполнении остальных
таким образом ваше условие, размещенное после него будет либо расценено как блок для выполнения(OPera), либо даст ошибку парсера, по причине отсутствия ;(Mozilla)
а блок кода, идущий в фигурных скобках будет выполнен в любом случае, независимо от всех условий
тким образом, несмотря на то, что данная конструкция может буть пропущена через парсер(если сделать перенос фигурной скобки на следующую строку) и даже выполнен, она не является верной
ТС написал синтаксически и по смыслу верную конструкцию.проблема не в ней
поэкспериментируйте сами
//condition='ru'//будет только 'ru', как и ожидается вами
condition='en'//будет два алерта 'en' и 'ru'.второй-является неверным
//condition='qwe'//будет только 'ru'.опять-таки неверно

if (condition == "en")
	{
	alert('en');
	}
else if(condition == "cz")
	{
	alert('cz');
	} 
else (condition == "ru")
	{
	alert('ru');
	}

так что, товарищ, идите учить матчасть

Gozar 21.09.2009 15:51

Gvozd

Все верно за исключением того, что я не писал этот код, а скопировал из первого поста и просто затер if перед else. Единственное что я забыл сделать это затереть (condition == "ru").

Но все равно спасибо за мат.часть.
if (condition == "en") {
    }
else if(condition == "cz"){
} 
else { 
}


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