"Uncaught TypeError: не может использовать оператор" in "для поиска" длины "в" вызванном плагином Datatables и jQuery 1.11.3
Я использую плагин jQuery Datatables, чтобы включить разбиение на страницы, сортировку и поиск с помощью моих таблиц. Элементы появляются, но не работают, и иногда отображается только разбиение на страницы. В консоли Chrome я получаю сообщение об ошибке:
Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
Вот демонстрационная страница.
Я использую Bootstrap рядом с этим плагином.
Ответы
Ответ 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()
Я сделал это, и моя проблема была решена.
Просто выбросив этот маленький кусочек, который я проигнорировал. Может помочь кому-то там.