2016-10-19 3 views
0

У меня есть следующий фрагмент кода:Почему я получаю пустые объекты при нажатии на массив?

var options = []; 
$("tr.mks-option-row").each(function (row) { 
    options.push({ 
     Id: $(row).data("option-id"), 
     CategoryId: $(row).data("category-id"), 
     Value: $(row).data("option-text") 
    }); 
}); 

Где .mks-option-row это селектор для всех строк в таблице. Таблица содержит несколько элементов данных, которые я также повторил как атрибуты данных на самом tr.

Однако, когда этот фрагмент выполнен, массив options содержит n пустой литерал объекта. Если в таблице содержится 4 строки, массив содержит [{},{},{},{}]

Что я здесь делаю неправильно? (Я также попытался использовать идентификаторы в кавычках, без разницы в результатах)

+1

Что такое выход 'console.log (строка, $ (строка))' –

+0

Если вы можете добавить HTML-код, это поможет ответить. –

+0

Это невозможно. Даже если данные не были найдены, вы получите '{Id: undefined, CategoryId: undefined, Value: undefined}'. Вы проверяете вывод с помощью 'JSON.stringify'? Это может объяснить это. Пожалуйста, напишите, как вы получаете '[{}, {}, {}, {}]', а также отправляете пример HTML, который позволяет нам восстановить ваш результат. – Amadan

ответ

3

row передаются в качестве индекса элемента в списке строк в функцию обратного вызова, вам нужно использовать this для того, чтобы выбрать строку как объект Jquery :

var options = []; 
$("tr.mks-option-row").each(function() { 
    options.push({ 
     Id: $(this).data("option-id"), 
     CategoryId: $(this).data("category-id"), 
     Value: $(this).data("option-text") 
    }); 
}); 

Update:

Более конкретно, $.each ожидает function(index, element). это один из вариантов; игнорирование первого аргумента - другое.

$("tr.mks-option-row").each(function (row, element) { 
    options.push({ 
     Id: $(element).data("option-id"), 
     CategoryId: $(element).data("category-id"), 
     Value: $(element).data("option-text") 
    }); 
}); 
+3

В частности, '$ .each' ожидает' function (index, element) '. «это» - один из вариантов; игнорирование первого аргумента - другое. – Amadan

+0

См. ['JQuery.each()' docs] (http://api.jquery.com/jquery.each/). – fracz

+0

Теперь я просто чувствую себя дураком ... Я должен знать это, но в разгар того момента, когда он ускользнул от меня. И я не люблю использовать '' this'' слишком много, потому что я чувствую, что не могу его контролировать. Однако, если вы отредактируете свой ответ на использование '' function (idx, row) {'', я дам его вам. Элемент передается как второй параметр и индекс как первый. Ваш ответ поставил меня на правильный путь ... –

Смежные вопросы