'стиль' имеет значение null или не является объектом

У меня проблемы с datatables.net и Internet Explorer 8 (могут быть и другие браузеры, но работает в IE9). Я потратил некоторое время, пытаясь выяснить, в чем проблема, и я не смог, но я выяснил, какой javascript, похоже, вызывает ее:

Если я удалю этот код, он будет работать в IE 8, может ли кто-нибудь указать на мою ошибку?

"aoColumns": [
    { "sType": "string" },                       // Player name
    { "sType": "numeric-minus" },                       // Damage done
    { "sType": "numeric-comma", "bVisible": false },    // DPS real
    { "sType": "numeric-comma" },                       // DPS Avg
    {"sType": "numeric-minus" },                        // Damage taken
    {"sType": "numeric-minus" },                        // Healing done
    {"sType": "numeric-comma", "bVisible": false },    // healing done HPS
    {"sType": "numeric-comma" },    // healing done HPS Avg
    { "sType": "numeric-comma" },                       // Overhealing
    { "sType": "numeric-comma" },                       // Healing taken
    { "sType": "numeric-comma", "bVisible": false },    // Mana done
    { "sType": "numeric-comma", "bVisible": false },    // Stamina done
    {"sType": "string", "bVisible": false },            // Class
    {"sType": "percent" },                              // Activity
],

Сведения об ошибке из IE 8
Сведения об ошибке веб-страницы

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Timestamp: Thu, 28 Jul 2011 09:59:45 UTC    

Message: 'style' is null or not an object
Line: 5585
Char: 7
Code: 0
media/js/jquery.dataTables.js

Строки из таблицы данных вокруг ошибки (строка ошибки имеет комментарий).

Функция: _fnGetUniqueThs Назначение: Получить массив уникальных элементов th, по одному для каждого столбца
Возвращает: узел массива:aReturn — список уникальных элементов
Входные данные: объект:oSettings — настройки dataTables объект
узел:nHeader — автоматически определять макет из этого узла - необязательный объект массива
:aLayout - макет ad/tfoot из _fnDetectHeader - необязательный

var nThs = _fnGetUniqueThs( oSettings, nTheadClone );
iCorrector = 0;
for ( i=0 ; i<iColums ; i++ )
{
    var oColumn = oSettings.aoColumns[i];
    if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" )
    {
        nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig );
    }
    else if ( oColumn.bVisible )
    {
        nThs[i-iCorrector].style.width = ""; // This is the error line
    }
    else
    {
        iCorrector++;
    }
}

person EKS    schedule 28.07.2011    source источник
comment
Можете ли вы разместить здесь строку 5585 в файле media/js/jquery.dataTables.js?   -  person Shadow Wizard Wearing Mask V2    schedule 28.07.2011
comment
Кажется, ошибка связана с шириной, у меня есть автоматическая ширина (IE не указывает ширину столбцов   -  person EKS    schedule 28.07.2011
comment
Добавлено определение nThs   -  person EKS    schedule 28.07.2011
comment
@EKS: что возвращает функция _fnGetUniqueThs?   -  person Shef    schedule 28.07.2011
comment
Добавлено описание этой функции.   -  person EKS    schedule 28.07.2011
comment
Удалите запятую в конце: [1,2,].length // Firefox: 2 | IE: 3   -  person Saxoier    schedule 28.07.2011
comment
@Saxoier: спасибо, ты спас меня от безумия. Есть ли инструмент, который может помочь в поиске таких синтаксических несовместимостей?   -  person Fdr    schedule 16.08.2011


Ответы (3)


Проблема, скорее всего, в вашем последнем объекте в массиве aoColumns:

    {"sType": "percent" },   
],

Вы оставили запятую в последней записи. Я сделал ту же ошибку, и она успешно работала, по крайней мере, с Firefox, но не с IE 8.

person Adam Field    schedule 22.11.2011
comment
это довольно примитивное регулярное выражение для поиска этих засранцев },[^]|}]*] - person max4ever; 28.03.2012
comment
Это была конечная запятая, которая вызывала у меня проблемы в IE8, и это исправило ее. - person Barrie; 06.09.2013
comment
ага. IE8, в отличие от современных браузеров, не может заботиться о лишних запятых. удаление последней запятой после последнего столбца исправит это для IE8. - person johnny; 05.12.2015

Использование этого кода устранило проблему для меня, но я оставляю вопрос открытым, возможно, кто-то знает, почему это работает с этим изменением.

"aoColumns": [
    { "sType": "string", "sWidth": "auto" },                       // Player name
    {"sType": "numeric-minus", "sWidth": "auto" },                       // Damage done
    {"sType": "numeric-comma", "bVisible": false, "sWidth": "auto" },    // DPS real
    {"sType": "numeric-comma", "sWidth": "auto" },                       // DPS Avg
    {"sType": "numeric-minus", "sWidth": "auto" },                        // Damage taken
    {"sType": "numeric-minus", "sWidth": "auto" },                        // Healing done
    {"sType": "numeric-comma", "bVisible": false, "sWidth": "auto" },    // healing done HPS
    {"sType": "numeric-comma", "sWidth": "auto" },    // healing done HPS Avg
    {"sType": "numeric-comma", "sWidth": "auto" },                       // Overhealing
    {"sType": "numeric-comma", "sWidth": "auto" },                       // Healing taken
    {"sType": "numeric-comma", "bVisible": false, "sWidth": "auto" },    // Mana done
    {"sType": "numeric-comma", "bVisible": false, "sWidth": "auto" },    // Stamina done
    {"sType": "string", "bVisible": false, "sWidth": "auto" },            // Class
    {"sType": "percent", "sWidth": "auto" }                              // Activity
],
person EKS    schedule 28.07.2011

в моем случае использование width="100%" в таблице вызвало проблему, удаление ширины решило ее.

рабочий код

<table id="dt_table">
<thead>
<tr>
    <th>column1</th>
    <th>column2</th>
    <th>column3</th>
    <th>column4</th>
    <th>column5</th>
    <th>column6</th>
</tr>
</thead>
</table>
person Hernan Marcelo    schedule 15.04.2015