Заполнение пары ключ-значение JavaScript

У меня есть форма с именами файлов и флажками, которая поступает с предварительно заполненного сервера. Моя форма должна обновлять флажки.

У меня есть код в JavaScript, который выбирает строки и пытается построить объект значения ключа с обновленными значениями из флажков в каждой строке.

Когда селектор настроен на возврат только тех, которые отмечены, словарь создается идеально, но я также хочу добавить в словарь записи, которые могли быть отмечены галочкой.

Когда я делаю селектор, выбираю все строки (в том числе, когда проверяемый атрибут не определен), тогда словарь не заполняется вообще.

Вот мой элемент ввода:

<input type="checkbox" name="Map" data-id="@file.FileId" checked="checked" class="auto-accept-checkbox" />

Вот фрагмент кода JavaScript:

var map = {};

$("#shareable-file-settings-form table tr").each(function () {
    map[$(this).attr('data-id')] = $(this).attr('checked') === 'checked';
});

Я пробовал на консоли элемент за элементом, и выражение моего правого операнда работает там! Я не знаю, почему этот вид будет вести себя неправильно (не помещая ничего в словарь), когда селектор изменен

от:

"#shareable-file-settings-form table tr :checked"

чтобы:

"#shareable-file-settings-form table tr"

1 ответ

Решение

Как сказал Джо, вы выбираете tr элемент, а не input[type=checkbox] внутри. Сначала измените ваш селектор на

"#shareable-file-settings-form table tr input[type=checkbox]"

Кроме того, свойство флажка в флажках является свойством HTML, а не атрибутом. Также вы можете использовать jQuery's .data() метод доступа к id атрибут данных.

Вы можете изменить его на

map[$(this).data('id')] = $(this).prop('checked');
Другие вопросы по тегам