Проблема с поиском, установлен ли флажок внутри jQuery в каждом цикле - PullRequest
0 голосов
/ 23 марта 2011

Мне было интересно, может ли кто-нибудь здесь помочь с этой проблемой? У меня присваивается значение переменной 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

});

1 Ответ

1 голос
/ 23 марта 2011

хочешь

$(this).is(':checked')
-or-
$(this).attr('checked')
-or-
this.checked

или измените свой запрос на:

$('input[type=checkbox]:checked')

В этом случае вам не нужен троичный, что может быть лучшим вариантом, поскольку вы не заполняете роли нулями (что вам может понадобиться?)

$(this).checked не существует, поскольку $(this) является объектом jquery, а .checked является атрибутом отдельного элемента.

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