Помогите с javascript - переменная неопределена

DriverCat
На сайте с 10.04.2008
Offline
115
1041

Доброе утро!

Есть функция :


function submit(choice){

var len = choice.length;

for (var n = 0; n < len; n++)
{

if(choice[n].style.display == 'block') {
opt = document.getElementById("1");
opt2 = document.getElementById("2");
len = opt.options.length;
len2 = opt2.options.length;


{

}
}

Firebug выдает что choice[n] id undefined. Как исправить эту ошибку?

O
На сайте с 06.08.2010
Offline
2
#1

если choice это массив, то ошибка тут в одном - choice[n] - действительно пустое значение

ставь проверку на каждой итерации цикла

if (choice[n]) { делай все что надо }

это особенности массивов жабоскрипта, причина в том, что жабоскрипт - не ПХП, ставится именно тот элемент, для которого указан индекс, например:

choice[0] = 1;

choice[2] = 2;

choice[5] = 10;

длина массива choice.length будет равна 6, т.к. жабоскрипт дополнит элементы с индексами 1,3,4 значениями undefined

так что спасет только проверка наличия элемента в каждой итерации цикла

З.Ы. возможно причина в невнимательности - в цикле переменная len переназначается, после чего она может быть за пределами массива

советую всегда не париться с конструкциями вида

var len = choice.length;

for (var n = 0; n < len; n++)

просто пишите for (var n = 0; n < choice.length; n++)

жабоскрипт вычислит длину ОДИН раз и будет подставлять сам, а вы сэкономите переменную и избежите путаницы

проверяйте код =))))

удачи!

Ну и на кой мне эта подпись?..
DriverCat
На сайте с 10.04.2008
Offline
115
#2
Opupenko:
если choice это массив, то ошибка тут в одном - choice[n] - действительно пустое значение
ставь проверку на каждой итерации цикла
if (choice[n]) { делай все что надо }

это особенности массивов жабоскрипта, причина в том, что жабоскрипт - не ПХП, ставится именно тот элемент, для которого указан индекс, например:

choice[0] = 1;
choice[2] = 2;
choice[5] = 10;

длина массива choice.length будет равна 6, т.к. жабоскрипт дополнит элементы с индексами 1,3,4 значениями undefined

так что спасет только проверка наличия элемента в каждой итерации цикла

З.Ы. возможно причина в невнимательности - в цикле переменная len переназначается, после чего она может быть за пределами массива
советую всегда не париться с конструкциями вида
var len = choice.length;
for (var n = 0; n < len; n++)

просто пишите for (var n = 0; n < choice.length; n++)
жабоскрипт вычислит длину ОДИН раз и будет подставлять сам, а вы сэкономите переменную и избежите путаницы

проверяйте код =))))

удачи!

Спасибо, помогло!

Теперь другая проблема - тестирую свои скрипты в ie6. Ничего вообще не работает и пишет ошибка 84 - неопределенная ошибка и не показывает в какой строке и т.д. Как мне тогда отлаживать-то если я даже не знаю где ошибка. В FF Opere и IE 8 все отлично работает...

O
На сайте с 06.08.2010
Offline
2
#3

юзаем утилиту для ослика - http://www.debugbar.com/download.php

качаем, ставим, отлаживаем

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий