2012-05-18 4 views
0
for(x in tr) 
{ 
    var td = tr[x].getElementsByTagName('td'); 
    if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0; 
} 

Loop работает только на 1-й итерации, но во второй итерации я получил ошибку т.д [2] не определен, тогда как каждая строка (тр) содержит восемь 8 столбцов (TD). Более 50 тр.Ошибка Javascript на getelementsbytagname

Я пробовал много, но так запутанно. Это не должно быть ошибкой.

+3

использовать x.getElementsByTagName ('td') вместо tr [x] .getElementsByTagName ('td') – Dasarp

ответ

0

Когда вы получаете такие ошибки, полезно взглянуть на ваши переменные, используя веб-инспектор (Chrome/Safari) или Firebug (Firefox). Поместите контрольную точку отладки на строку var td =, а затем посмотрите на значения переменных.

Это может быть связано с использованием цикла for in на массиве. Изменение внешнего контура на это и посмотреть, если он работает:

for (var x = 0, l = tr.length; x < l; ++x) { 
    var td = tr[x].... 
0

Я предполагаю, что вы обращаетесь к непреднамеренному свойству тра, не проверяя for in петли.

Try:

for(x in tr) 
{ 
    if(tr.hasOwnProperty(x)){ 
     var td = tr[x].getElementsByTagName('td'); 
     if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0; 
    } 
} 

Для быстрого объяснения, почему, считают это: "toString" in tr возвращает истину.

1

Если tr не является Object, есть вероятность, что он наберет другую недвижимость в цикле for...in. Если это так, .getElementsByTagName не существует и будет генерировать исключение.

Если tr является Array, вы должны использовать обычный цикл for.

Похожие: Why is using "for...in" with array iteration a bad idea?

0

К сожалению я нашел какой-то скрытый столбец тд при некоторых строк тр. Проверьте tr и td, если display = none.

0

Просто измените свой код, как сказал Дасарп.

for(x in tr) 
{ 
    var td = x.getElementsByTagName('td'); 
    if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0; 
}