Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Невидит только что созданную переменную


Автор: kaa 30.8.2007, 09:11
Код

Код

var topLeftArr = new Array(0,0);
topLeftArr[0] = 1;


В фаере работает, в IE нет...

Внимание вапрос: почиму?!?!?!?!  smile 

Нет, конечно вокруг еще до черта кода, но косяк локализовался вот именно здесь. Именно когда начинаю работать с только-что созданным масивом - лезет баг :(

Добавлено через 3 минуты и 24 секунды
Да, забыл добавит мессагу об ощибке:

Код

topLeftArr is undefined

Автор: Burrr 30.8.2007, 09:46
На всяк приведу код всей страницы:
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<script>
var topLeftArr = new Array(0,0);
topLeftArr[0] = 1;
alert(topLeftArr[0]);
</script>
</body>
</html>

Прекрасно работает в ИЕ6. Чудес не бывает! Ошибка возможно связана с этими строками, но явно не в них...

Автор: Се ля ви 30.8.2007, 10:06
JS-машина бывает перегоняет сама себя на медленных компах. Я пару раз с таким сталкивался, что в IE она не успевает закончить предыдущее сложное действие (как здесь - выделение памяти и создание объекта массива), а уже лезет выполнять следующее и возникает Error, если они непосредственно связаны. В этом случае спасёт незначительная задержка или просто небольшой пересмотр изначального алгоритма, что бы дать немного лишнего времени для оператора "new" и сразу после него выполнить что-нибудь другое.

P.S. Хотя случается такое действительно очень редко...

Автор: kaa 30.8.2007, 21:52
Burrr, А что у нас может влиять в коде на использование переменной? Причин, кроме тоу которую указал 
Се ля ви, невижу (на работе комп тормазит по страшному). И веть фаер-то не ругается главное. :(

Автор: Burrr 30.8.2007, 22:14
kaa, откуда мне знать чего у тебя там в коде.
Простой тест - проверь свою страницу на нормальном компе у коллег или кинь ссылку знакомым, пусть они погоняют. Вот и проверишь предположение Ce Ля Ви.

Автор: smartov 30.8.2007, 22:46
kaa, а массив и его использование лежат именно в рамках одного неймспейса (функция или просто последовательный код).
Они не разнесены по разным функциям? Не может быть такого, что попытка обращения к массиву происходит раньше, чем его инициализация?
Так же поищи обязательно синтаксические или грамматические ошибки (некоторые умудряются например вместо y русскую у написать - а потом сидеть и мучаться почему массив не создается).

Автор: kaa 31.8.2007, 08:28
smartov, Нет, никуда не разнесены :( Да и в фаере всё нормально работало - значит русские буквы нигде не прописывал.


ЗЫ: вообще код пичатал под Fierfox, ща портирую под IE :( Есть мысль тупо сварганить два варианта кода :(

Автор: kaa 31.8.2007, 09:22
Мдям

Когда делаю так:

Код

var topLeftArr = new Array(0,0);
topLeftArr = 1;


То ошибки нету. Чиго ем не нравится в этой строке?!

Код

topLeftArr[0] = 1;

Автор: smartov 31.8.2007, 11:34
kaa, чисто ради прикола попробуй так

Код

var topLeftArr = new Array();
topLeftArr.push(0);
topLeftArr[0] = 1;


может сработает smile)
Потому что явно где-то идет пересечение по переменым, то есть с другим кодом. Разбираться надо в общем - видеть весь код.
Да и то я думаю никто тут не осилит весь код читать, даже если ты его выложишь.

Автор: kaa 31.8.2007, 14:24
smartov, 

Думаю да... Тока если у кого бессонница smile

Попробую сегодня-завтра, спасибо smile

Автор: kaa 8.9.2007, 15:12
Всё... Это тупикЪ smile))

Вот так работает:

Код

//var topLeftArr = new Array(0, 0);
var topLeftArr = new Array(0, 0);
topLeftArr[0] = 1;


А так нет:

Код

var topLeftArr = new Array(0, 0);
//var topLeftArr = new Array(0, 0);
topLeftArr[0] = 1;


Называется "найди десять отличий"  smile  

Что меня этот IE уже бесить начинает... Кривой со всех сторон сразу :(

Добавлено через 4 минуты и 7 секунд
Кстати так тоже работает smile

Код

//
var topLeftArr = new Array(0, 0);
//var topLeftArr = new Array(0, 0);
topLeftArr[0] = 1;
return;


Тоесть если перед определением массива ставишь комментарий то всё работает.. Это вообще почиму?!

Кидаю сюда кусок рабочего кода:

Код

//Находим дитенка, рассчитываем его координаты и показываем 
        for(var c=0; c<nodeList.length; c++)
        {
            //if(nodeList.item(c).hasAttribute('foo'))
                if(nodeList.item(c).getAttribute('foo')=='layered-div')
                    if(nodeList.item(c).getAttribute('foo-parent-id')==parentId)
                    {
                        //Считаем координаты дитенка
                            //Получаем абсолютные координаты родительского блока
                            //
                        var topLeftArr = new Array(0, 0);
                        //var topLeftArr = new Array(0, 0);
                        topLeftArr[0] = 1;
                        return;


И кусок нерабочего:
Код

//Находим дитенка, рассчитываем его координаты и показываем 
        for(var c=0; c<nodeList.length; c++)
        {
            //if(nodeList.item(c).hasAttribute('foo'))
                if(nodeList.item(c).getAttribute('foo')=='layered-div')
                    if(nodeList.item(c).getAttribute('foo-parent-id')==parentId)
                    {
                        //Считаем координаты дитенка
                            //Получаем абсолютные координаты родительского блока
                        var topLeftArr = new Array(0, 0);
                        //var topLeftArr = new Array(0, 0);
                        topLeftArr[0] = 1;
                        return;


Там дальше нет смысла копироватить ибо return smile

Добавлено через 8 минут
ГОСПОДА! Всё дело в каментах! У меня движок генерит страницы на utf-8 и кодировку видимо для скриптов тоже соответствующую задаёт.  Пересохранил скрипт в utf-8 ошибка пропала. Я просто тихо фигею над IE. Фаер гораздо менее привередлив :(

Думаю данная проблема решена, всем спасибо за участие!

Автор: SelenIT 8.9.2007, 15:24
kaa, а это кусок исходника в редакторе или кусок того, что показывает в блокноте View source самого IE? Пока у меня единственная мысль - несовместимые переносы строк, из-за чего с точки зрения IE объявление массива в нерабочем варианте оказывается на одной строке с предшествующим комментом...

Автор: kaa 8.9.2007, 18:10
Это был кусок кода.

Автор: smartov 10.9.2007, 15:29
kaa, 
Цитата(kaa @  8.9.2007,  14:12 Найти цитируемый пост)
ГОСПОДА! Всё дело в каментах!

Если бы я в отпуск не ездил, то так бы тебе и сказал, что просто символ закрался, который IE-шке парсер наворачивает smile
Но ты и сам разобрался, что имхо гораздо лучше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)