Мне было интересно, может ли кто-нибудь здесь помочь с этой проблемой? У меня присваивается значение переменной 1, если флажок установлен, и 0, если не установлен внутри цикла jQuery.
У меня есть список HTML, который выглядит следующим образом:
<ul id="role-list">
<li id="role_1">
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p>
</li>
<li id="role_4">
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p>
</li>
<li id="role_5">
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p>
</li>
</ul>
Я пытаюсь создать многомерный массив с помощью jQuery, используя следующий код:
var roles = {};
$('#role-list li').each(function() {
var role_id = jQuery(this).attr('id').replace('role_', '');
roles[role_id] = {};
$('input[type=checkbox]').each(function () {
roles[role_id][jQuery(this).attr('class')] = $(this).checked ? 1 : 0;
});
});
alert(JSON.stringify(roles));
Вот вывод, который я получаю, который одинаков независимо от того, установлены ли какие-либо флажки или нет:
{"1":{"read":0,"write":0},"4":{"read":0,"write":0},"5":{"read":0,"write":0}}
Проблема, которую я получаю, заключается в том, что код:
$(this).checked ? 1 : 0;
не работает правильно. Я попробовал несколько вариантов, чтобы попытаться заставить это работать до публикации, но мне все еще не повезло.
Буду признателен за любую помощь.
Спасибо
.............
В конце концов я решил удалить каждый цикл для флажков и использовать следующий код, который работает правильно:
var roles = {};
$('#role-list li').each(function() {
var role_id = jQuery(this).attr('id').replace('role_', '');
roles[role_id] = {};
roles[role_id]['read'] = jQuery(this).find('.read').is(':checked') ? 1 : 0;
roles[role_id]['write'] = jQuery(this).find('.write').is(':checked') ? 1 : 0
});