
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|||
![]() ![]() Помагите Здесь живу!!! ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 23010 Пользователь №: 20039 На форуме: Карма: 623 ![]() |
Вступление: написал человек функцию, работает в ИЕ, в других браузерах не работает. Написал я функцию, работает ВЕЗДЕ, кроме ИЕ. Стал вопрос совместимостей, делаю банально:
if(navigator.userAgent.indexOf("MSIE") >= 0) { В итоге эффект такой, что инициализируется функция и выполняется из ИЕ, когда этот браузер не ИЕ. В чём же дело, убираем вторую часть: if(navigator.userAgent.indexOf("MSIE") >= 0) { Алерта не происходит, НО ФУНКЦИЯ ВЫПОЛНЯЕТСЯ. Если банально убрать эту функцию из условия - всё, страница не работает как надо. Это говорит о том, что функция инициализируется внутри условия... Так вопрос, это особенность JS, или как-то по другому это всё решается? Что я сделал: создал 2 независимых функции a1 и a2, и при вызове функции a, сделал такой финт: function selectColor(id) { Проблема решена, но грусть осталась на душе, почему такая фигня происходит... Спустя 15 часов, 34 минуты, 30 секунд (2.12.2011 - 11:43) KonstantinK написал(а): Вероятно что JS сначала инициализирует все функции независимо от их расположение, а потом уже выполняет все действия в коде. Но проблема то решена , чего грустить? ![]() Спустя 24 минуты, 18 секунд (2.12.2011 - 12:08) redreem написал(а): вот так надо было сделать: if(navigator.userAgent.indexOf("MSIE") >= 0) { Спустя 4 дня, 10 часов, 27 минут, 28 секунд (6.12.2011 - 22:35) inpost написал(а): redreem Спасибо! То, что надо. Спустя 18 минут, 4 секунды (6.12.2011 - 22:53) vital написал(а): Дело в том, как работает Js. Она инициализирует ВСЕ переменные функции на этапе парсинга. Есть такой момент как "поднятие" переменных. Все переменные объявляются внутри текущей области видимости сраху, независимо от того, где они объявлены изначально в коде. ПРимерно так:
Обе ваши функции были созданы, а выполнилась последняя. Спустя 55 секунд (6.12.2011 - 22:54) vital написал(а): По вышенаписанной причине в Js считается хорошим тоном и правилом, объявлять все переменные в начале текущей области видимости(а с ними тоже не все просто) т.е. правильно так;
Спустя 25 минут, 59 секунд (6.12.2011 - 23:20) inpost написал(а): Спасибо! Спустя 4 минуты, 35 секунд (6.12.2011 - 23:25) vital написал(а):
Глядишь в эксперты возьмут ![]() Хотя бы по js-у) -------------------- Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum). |
||
![]() |
![]() ![]() ![]() |