Заполнение пары ключ-значение 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');