Подтвердить что ты не робот

"Uncaught TypeError: не может использовать оператор" in "для поиска" длины "в" вызванном плагином Datatables и jQuery 1.11.3

Я использую плагин jQuery Datatables, чтобы включить разбиение на страницы, сортировку и поиск с помощью моих таблиц. Элементы появляются, но не работают, и иногда отображается только разбиение на страницы. В консоли Chrome я получаю сообщение об ошибке:

Uncaught TypeError: Cannot use 'in' operator to search for 'length' in 

Вот демонстрационная страница.

Я использую Bootstrap рядом с этим плагином.

4b9b3361

Ответ 1

Эта ошибка связана с методом isArraylike в jQuery версии 1.11.3. (только). Метод выглядит следующим образом

function isArraylike( obj ) {

    // Support: iOS 8.2 (not reproducible in simulator)
    // `in` check used to prevent JIT error (gh-2145)
    // hasOwn isn't used here due to false negatives
    // regarding Nodelist length in IE
    var length = "length" in obj && obj.length, // <------ THIS IS THE CULPRIT
        type = jQuery.type( obj );

    .......
}

Эта версия jQuery использовала длину в объекте для получения длины. (Я ничего не знаю об этом).

Но я знаю, что никакие другие версии jquery не имеют этой проблемы.

В версиях 1.11.3 и 2.1.4 (как отметил Джеймс в комментариях) эта проблема.

Таким образом, решение состояло бы в том, чтобы просто перейти на следующую версию или хотя бы использовать любую другую версию, кроме 1.11.3 или 2.1.4

Ответ 2

Я работаю над Ruby on Rails с gem jquery-datatables-rails.

Я обновляю камень непосредственно из последнего коммита на GitHub:

gem 'jquery-datatables-rails', github: "rweng/jquery-datatables-rails", branch: "master"

Эта работа для меня, я полагаю, что они скоро выпустят новую версию драгоценного камня с этой фиксацией.

Ответ 3

Обновление для DataTables в DataTables 1.10.7 или 1.10.8-dev не работало для меня (с использованием jQuery 1.11.3).

Переход к jQuery 1.11.2 работал (используя DataTables 10.0.0)

Ответ 4

Несмотря на то, что он не связан с DataTables, я столкнулся с этой ошибкой "не могу использовать в операторе для поиска длины". Это был основной результат Google для ошибки, поэтому я просто хотел опубликовать мою проблему в качестве ответа, если она поможет кому-то еще.

У меня было:

ApplicationIDs: $.map(".application-checkbox:checked", function (checkedApplicationCheckbox, i) {

Я забыл обернуть мой селектор с помощью $, поэтому исправление заключалось в том, чтобы убедиться, что я передавал фактические элементы jQuery в качестве первого аргумента map, а не только строку...

ApplicationIDs: $.map($(".application-checkbox:checked"), function (checkedApplicationCheckbox, i) {

Я почти смущен, чтобы опубликовать это;)

Приветствия

Ответ 5

Не нужно понижать jQuery. Я решил ту же ошибку, используя aoColumns как

$('#id').DataTable( {
    data: [["A", "B"], ["a", "b"]],
    'aoColumns': [ 
        { sWidth: "50%", bSearchable: false, bSortable: false }, 
        { sWidth: "50%", bSearchable: false, bSortable: false }
        ],
    } );

Я использую jQuery 2.1.4 и DataTables 1.10.9

Ответ 6

Я установил аналогичную проблему, добавив json dataType так:

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});

И в моем контроллере мне пришлось использовать двойные кавычки вокруг любых строк вроде этого (примечание: они должны быть экранированы в java):

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    // parameters = varname1=varvalue1&varname2=varvalue2
    String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
    return exampleData;
}

Ответ 7

У меня была такая же проблема, но версия jQuery не была для меня виновницей. В моем случае я неправильно сериализую форму. Код закончил с этой ошибкой:

$('#form_name').serialize()

В то время как я должен был использовать.

$('#form_name').serializeArray()

Я сделал это, и моя проблема была решена.

Просто выбросив этот маленький кусочек, который я проигнорировал. Может помочь кому-то там.